2017-06-08 4 views
0

Ich möchte ein Programm mit mehreren Threads machen. In jedem Thread sollte eine Datenbank INSERT sein.Python Multithreading sqlite3 Einsätze

EDIT

Aber ich habe jetzt den gleichen Fehler nach einer Zeit

Mein Code:

import threading, sqlite3 



class myThread(threading.Thread): 


    def __init__(self, pn, icm): 
     threading.Thread.__init__(self) 
     self.pn = pn 
     self.icm = icm 


    def run(self): 

     con = sqlite3.connect("DB.db", check_same_thread=False) 
     cursor = con.cursor() 
     cursor.execute("CREATE TABLE IF NOT EXISTS test(pn VARCHAR(100), icm VARCHAR(100))") 
     cursor.execute("INSERT INTO test VALUES('"+self.pn+"', '"+self.icm+"')") 
     con.commit() 
     con.close() 


for i in range(0, 300): 
    myThread("ABCDEFG", "1234546").start() 

ich den Fehler:

sqlite3.OperationalError: database is locked 

Danke, Jay

+0

Was ist schief gelaufen? – tdelaney

+0

@tdelaney Bearbeitet – Jay

+0

Wie die Fehlermeldung sagt. Sie schließen die Datenbank mit 'con.close()'. Aus diesem Grund kann die Abfrage in Ihrer Datenbank nicht geschrieben/ausgeführt werden. Sie müssen die Verbindung wiederherstellen, normalerweise mit 'sqlite3.connect()'. – arnold

Antwort

0

Beantwortet

import threading 
import time, sqlite3 


class myThread(threading.Thread): 

    def __init__(self, pn, icm): 
     threading.Thread.__init__(self) 
     self.pn = pn 
     self.icm = icm 

     self.con = sqlite3.connect("DB.db", check_same_thread=False) 
     self.cursor = self.con.cursor() 
     self.cursor.execute("CREATE TABLE IF NOT EXISTS test(id INTEGER PRIMARY KEY AUTOINCREMENT, pn VARCHAR(100), icm VARCHAR(100))") 



    def run(self): 

     self.cursor.execute("INSERT INTO test VALUES(NULL, '"+self.pn+"', '"+self.icm+"')") 
     self.con.commit() 
     self.con.close() 



for i in range(0, 300): 

    myThread("ABCDEFG", "12345678").start()