9
votes

Continuez à charger après IntegrityError

en Python, je remplissons une base de données SQLite à l'aide de l'Importmany, afin que je puisse importer des dizaines de milliers de lignes de données à la fois. Mes données sont contenues comme une liste de tuples. J'ai eu ma base de données configurée avec les clés primaires où je les voulais.

Problème que j'ai couru était dans les erreurs principales de la clé jeux d'une intégritéError. Si je gère l'exception, mon script arrête l'importation au conflit principal principal. de
Essayez: P>

try:
    self.curs.executemany("INSERT into towers values (NULL,?,?,?,?)",self.insertList)
except IntegrityError:
    print "Primary key error"
conn.commit()


0 commentaires

3 Réponses :


0
votes

Vous pouvez utiliser lastrowid pour obtenir le point où vous avez arrêté:

http://docs.python.org/library/sqlite3 .html # sqlite3.cursor.lastrowid

Si vous l'utilisez, vous ne pouvez pas utiliser exécuteur .


0 commentaires

0
votes

Utilisez A pour la boucle pour iTERE dans la liste et utilisez-le à la place de l'exécutant. Entourez la boucle pour votre essai et poursuivez l'exécution après une exception. Quelque chose comme ceci: xxx

Vous pouvez même compter combien d'éléments de la liste étaient vraiment insérés.


2 commentaires

Si je comprends bien, exécuteur existe car il offre une augmentation significative de la vitesse sur les commandes exécutées par python-itératées. Donc, votre solution, alors qu'elle fonctionnerait, ralentira considérablement une importante importation de données. Une solution consisterait à garder une trace des touches principales qui ont été ajoutées dans un ensemble Python et filtrent la llematiste à l'avance avant de l'alimenter au curseur.


@Pethercmahan ok je suis d'accord. Ce n'est pas un code efficace. Il ne fait que "fonctionne" comme vous l'avez dit.



4
votes

Pour répondre (2) Tout d'abord, si vous souhaitez continuer à charger après avoir obtenu une erreur, c'est une solution simple sur le côté SQL:

INSERT OR IGNORE INTO towers VALUES (NULL,?,?,?,?)


0 commentaires