Bonjour à tous,
Après pas mal d'années à joongler entre C++, Perl, PHP et leur lib Mysql respectives. Je me met aujourd"hui à Python avec la lib
mysql-python qui est basée sur l'API Mysql C.
Voilà pour l'intro.
Mon objectif c'est de créer un programme de nettoyage d'une énorme base de donnée, en évitant si possible que le programme se suce allègrement toute la mémoire du serveur. Et là c'est plus compliqué...
Je m'explique par le code :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
|
def testData(self):
print "On affiche toutes les valeurs qui vont être modifiées"
# On observe tous les tuples concernés dans la table Document
cursorDoc = self.dbConnect.cursor(cursors.SSCursor)
queryDoc = "SELECT DocKey FROM Document WHERE Date < '20080101' "
cursorDoc.execute(queryDoc)
for (docKey,) in cursorDoc:
# On compte le nombre d'éléments qui vont être supprimés dans les tables liées
cursorDel = cursor(cursors.SSCursor)
tables = ("Tracing", "DocPage", "SubscriberDoc", "Document")
for table in tables:
queryCnt = "SELECT count(*) FROM %s WHERE DocKey = '%s' " % (table, docKey)
cursorCnt.execute(queryCnt)
print cursorCnt
cursorCnt.close()
cursorDoc.close() |
et la réponse à l'exécution :
Et bien j'ai l'honneur de vous apprendre que ce code ne fonctionne pas car :
"You can't really have multiple cursors on the same connection at the same
time."
Traduction : c'est impossible d'avoir plusieurs curseurs en même temps.
C'est une limitation de l'api Mysql-C sur laquelle est basé python-mysql.
A noter que j'utilise des SSCursor qui conservent le résultat côté serveur ce qui est à l'origine du problème. Mais si je veux éviter de faire enfler ma mémoire, je fais comment ?
Si vous avez des idées je suis preneur...
Merci,
Ercete
Partager