Ich weiß, dass Transaktionen mit einer InnoDB-Tabelle Autocommit sind, aber ich verstehe, dass für eine einzelne Aussage zu bedeuten? Ich möchte beispielsweise prüfen, ob ein Benutzer in einer Tabelle vorhanden ist. Wenn dies nicht der Fall ist, erstellen Sie ihn. Allerdings liegt eine Wettlaufbedingung vor. Ich glaube, dass die Verwendung einer Transaktion vor der Ausführung der Auswahl sicherstellen wird, dass die Tabelle bis zur nachfolgenden Einfügung unberührt bleibt und die Transaktion festgeschrieben wird. Wie können Sie das mit MySQLdb und Python machen?Wie erstellen Sie eine Transaktion, die mehrere Anweisungen in Python mit MySQLdb umfasst?
Antwort
Es gibt ein SELECT ... FOR UPDATE, mit dem Sie die Zeilen vor dem Lesen durch eine andere Transaktion sperren können, aber ich glaube, die Datensätze müssen an erster Stelle existieren. Dann kannst du tun, was du sagst, und entsperren, sobald du es begehst.
In Ihrem Fall denke ich, der beste Ansatz ist einfach eine eindeutige Einschränkung für den Benutzernamen festlegen und versuchen, einzufügen. Wenn Sie eine Schlüsselausnahme erhalten, können Sie dem Benutzer mitteilen, dass der Name bereits vergeben wurde.
Theoretisch könnten Sie disable auto-commit, die tun ein Two Phase Commit transaction, wie in Python's DB API definiert. Es scheint ein bisschen schwieriger zu sein, dieses Feature in freier Wildbahn zu bekommen. SQLAlchemy seems to include support dafür auf MySQL, so ist es möglich.
- 1. python mysqldb mehrere Cursor für eine Verbindung
- 2. Erstellen einer Klasse in Python mit mysqldb
- 3. Microsoft.Practices.EnterpriseLibrary.Data: Mehrere Anweisungen in einer Transaktion ausführen
- 4. mehrere mysql-Anweisungen in einer Transaktion C#
- 5. Erstellen Sie Funktion über MySQLdb
- 6. So erstellen Sie ein HTML-Formular, das mehrere Seiten umfasst
- 7. Erstellen Sie eine lokale Transaktion in einer Spring JTA-Transaktion
- 8. Python MySQLdb mit SELinux
- 9. So erstellen/löschen Sie mehrere Elemente in einer Transaktion
- 10. So erstellen Sie benutzerdefinierte Anweisungen in Sphinx
- 11. Wie umfasst die Arbeit?
- 12. Wie Sie mehrere SELECT-Anweisungen in eine temporäre Tabelle einfügen
- 13. Mehrere Anweisungen in Listenbeziehungen in Python?
- 14. Lambda und mehrere Anweisungen in Python
- 15. Python MySQLdb keine Daten
- 16. Python libmysqlclient segfault (MySQLdb)
- 17. Wie man mehrere Regex-Anweisungen in Python präzise kaskadiert
- 18. kann nicht Python-mysqldb
- 19. Unterstützt das MySQLdb-Modul vorbereitete Anweisungen?
- 20. Python + MySQLdb Executemany
- 21. Hyperledger-Transaktionstyp: Erstellen Sie Transaktion
- 22. Multiprozessing in Python, mehrere Prozesse, die gleiche Anweisungen ausführen
- 23. Erstellen Sie eine Abfragesprache mit Python
- 24. Python MySQLDB SSL-Verbindung
- 25. Fehler importieren MySQLdb in Python
- 26. Erstellen Sie eine Transaktion um die generierten SQL-Einfügungen mit SQL Management Objects
- 27. installieren MySQLdb Python-Modul
- 28. Linq drehen Sie eine Zeile in mehrere, wenn das Datum mehrere Tage umfasst
- 29. Python MySQLdb Ausnahmen
- 30. MySQLdb und Python KeyError Handhabung
Sprechen Sie darüber: http://dev.mysql.com/doc/refman/5.0/en/innodb-locking-reads.html – fncomp
@JoshN ja, das ist, worüber ich spreche. Danke für das Posten des Links. – Hiro2k