Lecture BDD SQL en multithreading
Bonjour à toutes et à tous,
Je viens vers vous car j'ai besoin d'aide sur mon code en python. Etant un néophyte, j'ai énormément de mal à comprendre le multithreading, et comment je pourrais l'implémenter dans mon programme.
Premièrement, ce que je souhaiterais réaliser, est une boucle lisant chaque colonne d'une base de donnée SQLlite3 (je penses avoir réussi cette partie ^^).
Cependant (et c'est la ou je bloque), à l’intérieur de cette boucle, je souhaiterais exécuter un script indépendant, en parallèle, lisant chacune de ces colonnes.Ce script devra être appelé à chaque ligne du tableau SQL
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74
|
class Lecture_BDD_SQL ():
def __init__ (self):
pass
def lecture_db(self,):
# Lis les bases de donnees et execute la requete
try:
os.chdir('P:\\Test_Python\\Operationnel\\RequeteSQL\\BDD')
#creation curseur
connect_table_test = sqlite3.connect('Test.db')
curseur_test = connect_table_test.cursor()
#voit tous les ligne presente dans la bdd
#curseur_requete.execute("SELECT Id,Ref,Utilisateur,Environment,Requete,Frequence FROM Table_requete")
curseur_test.execute("SELECT * FROM Test")
#recuperation des informations de chaque colone par ligne
maliste = curseur_test.fetchall()
for ligne in maliste :
self.ma_liste_test(ligne)#----------------------------------------------> Process qui doit etre en parallele independant
curseur_test.close()
connect_table_test.close()
except AttributeError as Ae :
print("Erreur d'attribut: \n {}".format(Ae))
except EnvironmentError as EnE :
print(EnE)
except SyntaxError as SyE :
print("Une erreur dans la syntaxe est survenue : \n {}".format(SyE))
except ImportError as ImE:
print("Le module implementer est introuvable : \n {}".format(ImE))
def ma_liste_test(self,*maliste):
'''
Lecture de la liste et execution de la requete vers la base de donnée concernée
'''
une_liste = maliste
for colonne in une_liste:
id_req = colonne[0]
ref = colonne[1]
username = colonne[2]
env_req = colonne[3]
query_req = colonne[4]
frequenece_req = colonne[5]
url_req = colonne[6]
port_req = colonne[7]
host_req = colonne[8]
nombase_req = colonne[9]
#creation d'un dsn makedsn('Host Name', 'Port Number', nom_base ='Service Name')
dsn_oracle = cx_Oracle.makedsn(host_req,port_req,service_name = nombase_req )
#connexion à la BDD
db = cx_Oracle.connect(user = username, dsn = dsn_oracle )
curseur = db.cursor()
#execution de la requete
try:
data_oracle = curseur.execute(query_req)
except cx_Oracle.DatabaseError as exc:
error, = exc.args
print("Oracle-Error-Code:", error.code)
print("Oracle-Error-Message:", error.message)
#recuperation des resultats de la requete
resultats = data_oracle.fetchall()
print(resultats)
curseur.close()
time.sleep(frequenece_req)
#enregistrement du resultat dans la BDD
os.chdir('P:\\Test_Python\\Operationnel\\RequeteSQL\\BDD')
#creation ichier sauvegarde
fichier = open("SaveRequest.txt","a")
fichier.write("====================================================\n" )
heure = datetime.now()
fichier.write("heure actuelle: \n{heureactuelle} \n".format(heureactuelle = heure))
fichier.write("La requete appelée:\n{requete} \n".format(requete = query_req) )
fichier.write("Resultats de la requête : \n{result}\n".format(result = resultats)) |
J'ai aussi entendu parler du multiprocessing et du ThreadPoolExecutor mais je ne vois pas lequel utiliser ^^