Eine Frage: Ich habe mehrere Datensätze, welche zeitgleich anliegen und in der Datenbank geändert werden können. Momentan macht das Programm folgendes für jeden einzelnen Datensatz: - Datenbankinstanz erzeugen - Datenbank öffnen - SQL String erzeugen - SQL in die Datenbank schreiben - Datenbank commiten - Datenbank schließen - Datenbankinstanz schließen Kann ich, so wie es auch bei einem Insert funktioniert, mit einem einzelnen SQL Statement mehrere Reihen anhand ihres primären Schlüssels updaten? Oder bin ich gezwungen jeden Datensatz einzeln zu ändern? Liebe Grüße René
Gast
#6970849
Rene K. schrieb: > Kann ich ... mit einem einzelnen SQL Statement mehrere Reihen ... updaten? Klaro. UPDATE [tabelle] SET [spalte] = [wert] WHERE [whereclause];
Stephan schrieb: > UPDATE [tabelle] SET [spalte] = [wert] WHERE [whereclause]; Quasi:
1 | |
2 | |
3 | |
4 | |
Sicher? Ich probiere das gleich mal aus.
Gast
#6970883
Rene K. schrieb: > Sicher? Ich probiere das gleich mal aus. Scherzkeks?!;) In jedem SQL Statement gibts natürlich nur eine WHERECLAUSE... Aber:
1 | |
2 | |
3 | |
ginge natürlich
Aktuell sieht der Syntax dann wie folgt aus:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
9 | |
da wirft er mir einen Syntaxfehler aus, geht jedoch nicht näher auf den Fehler ein. Mache ich jedes UPDATE Statement einzeln in einer gemeinsamen Query:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
7 | |
8 | |
Wirft er folgenden Fehler:
1 | |
2 | |
3 | |
4 | |
5 | |
6 | |
aber wie und wo kann ich dann cmd_query_iter oder multi=True setzen?
Gast
#6970899
Rene K. schrieb: > multi=True setzen? https://dev.mysql.com/doc/connector-python/en/connector-python-api-mysqlcursor-execute.html
Ergo70 schrieb: > Rene K. schrieb: >> multi=True setzen? > > https://dev.mysql.com/doc/connector-python/en/connector-python-api-mysqlcursor-execute.html Oh jep, danke :-D Ich habe jetzt die ganze Zeit am MySQL Server rumgesucht und nicht in Python.
Gast
#6970916
Wozu das ganze denn? Was ist das Problem, mehrere UPDATE Statements anzugeben? - Datenbank öffnen - INSERT / UPDATE statement absetzen - INSERT / UPDATE statement absetzen - INSERT / UPDATE statement absetzen - Datenbank schließen Sollte problemlos gehen. Oder willst du was anderes machen? Willst du eventuell sicherstellen, das alle Inserts funktionieren oder fehlschlagen, und nie nur ein paar? Da kannst du Transactions nehmen. Willst du eventuell stattdessen mehrere Zeilen ändern? Dann einfach alle beim SET angeben. Willst du bei mehreren IDs ein Feld gleich setzen? Dann kannst du ganz normal "UPDATE x SET y=z WHERE id in (1,2,3,...)" machen. Willst du Updates machen, wenn ein insert nicht geht, weil ein Eintrag nicht da ist? Dann nimm "INSERT ... ON DUPLICATE KEY UPDATE ..." Hast du daten von einer anderen Tabelle, anhand derer du inserts oder updates machen willst? Dann kannst du "insert into" nehmen. Willst du beim Update daten checken oder ändern? Dann nimm einen Trigger. Rene K. schrieb: > - SQL String erzeugen > - SQL in die Datenbank schreiben Ich hoffe "SQL String erzeugen" ist ein prepared statement. Das verhindert Fehler, und da ist es auch einfacher, beliebige Daten beim absetzen des Query mitzugeben: https://dev.mysql.com/doc/apis-php/en/apis-php-mysqli.quickstart.prepared-statements.html
Gast
#6970950
1 EINE Verbindung öffnen 2 Updates raushauen 3 wenn fertig und kein Fehler : commiten 4 Verbindung schliessen. Das ist schneller als jedes einzelne Statement zu comitten und dann auch noch die Verbindung wieder neu aufzumachen, das frisst massiv Performance bei vielen Updates. Evt. auch an einen Lock denken wenn da andere noch drauf rumwerkeln.
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.