Bonjour,

Depuis plusieurs jours je cherche une solution à mon problème d'accès à la BD SQlite3 avec plusieurs threads.
Ma fonction d'accès à la BD :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
def ouvrecnx(self):
 
    basedonnee = os.path.join(CONFIG_DATABASE_PATH, CONFIG_DATABASE_NAME)
    db = QSqlDatabase.addDatabase("QSQLITE")
    db.setDatabaseName(basedonnee)
 
    if not db.open():
        QMessageBox.critical(None, "Problème d'accès à la base de données \n",
                             "Impossible d'établir une connexion à la base de données.\n"
                             "Cliquer Annuler pour sortir.",
                             QMessageBox.Cancel)
        return False
    else:
        return db
et le code de lancement des threads

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
 
 
t1 = threading.Thread(name='Tables Temporaires1', target=self.creation_tables_tmp1)
t2 = threading.Thread(name='Tables Temporaires2', target=self.creation_tables_tmp2)
 
t1.start()
print(t1.name)
 
t2.start()
print(t2.name)
D'après la doc, pour chaque thread = une connexion à la DB, mais d'une par dans www.sqlit.org il y' a la notion de "SQLITE_CONFIG_MULTITHREAD" que je n'ai pas pu l'intégrer dans mon code
et d'autre par j'ai trouvé un bout de code en C++ qui génère d'une manière automatique la connexion à DB avec un nom différent

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
QSqlDatabase DBUtil::openDataBase()
{
    quint32 value = QRandomGenerator::global()->generate();
    QSqlDatabase db;
    if ( true == QSqlDatabase::contains(QString::number(value)))
    {
        db = QSqlDatabase::database(QString::number(value));
    }
    else
    {
        db = QSqlDatabase::addDatabase("QSQLITE", QString::number(value));
        db.setDatabaseName("xxx.db");
    }
 
    if (false == db.open())
    {
        qDebug() << db.lastError().text();
    }
    return db;
}
Merci de bien m'aider.