Je suis nouveau à l'adaptateur MySQL de Python et Python. Je ne sais pas si je manque quelque chose d'évident ici:
db = MySQLdb.connect(# db details omitted) cursor = self.db.cursor() # WORKS cursor.execute("SELECT site_id FROM users WHERE username=%s", (username)) record = cursor.fetchone() # DOES NOT SEEM TO WORK cursor.execute("DELETE FROM users WHERE username=%s", (username))
4 Réponses :
Je suppose que vous utilisez un moteur de stockage prenant en charge les transactions (par exemple InnoDB), mais vous n'appelez pas voir http: //mysql-python.sourceforge.net/faq.html#my-Data-Disappareed-or-won-t-go-away : P>
commençant par 1.2.0, mysqldb désactive
autocommouver Par défaut, selon les besoins de
la norme DB-API (PEP-249). Si tu
utilisent des tables innovées ou une autre
type de type de table transactionnel,
vous aurez besoin de faire connace.commit ()
avant de fermer la connexion, ou bien
Aucun de vos changements ne sera écrit
à la base de données. p>
blockQuote>
Voir aussi cette similaire de question: Python MYSQLDB Update La requête échoue P > db.comp () code> après la suppression. L'effet de la suppression est jeté si vous ne vous engagez pas. P>
Bingo! C'est la chose spécifique à la python que je cherchais, car ce qui précède aurait travaillé dans PHP ou Ruby sans problème sans problème. Merci les gars!
m'a brisé la tête avec ça hier ... a pris un certain temps pour comprendre pourquoi. Pensez-vous qu'il y a un gain de performance de tout commet à la fois? C'est-à-dire au lieu de supprimer chaque instance de A pour une boucle, commettez-la à la fin avant la fermeture?
Oui, il y a certainement un gain de performance. Par exemple, la configuration par défaut pour Innodb fait un FSYNC () code> après chaque transaction commit. Voir dev.mysql.com/doc/refman/5.5 / fr / ...
à votre code ci-dessus,
Il suffit d'ajouter un appel à La fonctionnalité est loin d'une gêne: p>
Cela vous permet d'économiser des problèmes de corruption de données
quand il y a des erreurs dans vos questions. P> self.db.commit () code>. p>
Peut-être que vous violez une contrainte de clé étrangère. P>
Le problème peut être que vous n'engageez pas les modifications. Cela peut être fait par
En savoir plus sur ce ici < / a> p> conn.ch.came () code> p>
Quels privilèges avez-vous sur les bases de données?
Oui, assurez-vous que l'utilisateur que vous utilisez a le droit de supprimer des lignes.
Quand vous dites "ne semble pas fonctionner": comment savez-vous? Avez-vous un message d'erreur? Si oui, lequel? Veuillez signaler tous les détails à l'avance.
Excuses. En ne semble pas fonctionner, je veux dire que si je exécutez Select * à partir des utilisateurs; À la console MySQL, je vois toujours la rangée là-bas. Il n'y a pas de message d'erreur du tout. L'utilisateur a des privilèges complets.