Python-Variablenersatz in Sqlite3 INSERT-Anweisung

Gibt es eine Möglichkeit, den Variablenaustausch von Python zu verwenden, wenn man Sqlite-Daten aktualisiert, die auf ein bekanntes rowid ausgerichtet sind? Ich versuche etwas zu sagen:

cursor.execute('INSERT INTO Words(rowid,f1,f2) VALUES(?,?,?)', [rowid,2,3]) 

Das Problem ist, dass dies mit Fehler fehlschlägt:

 sqlite3.IntegrityError: PRIMARY KEY must be unique 

Ich möchte eine Liste von Werten in den vorhandenen Datensatz der Tabelle schreiben, ohne die rowid-Nummer zu ändern. Was ist der akzeptierte Weg, um alle Felder aus einer Liste von Werten zu aktualisieren?

One Solution collect form web for “Python-Variablenersatz in Sqlite3 INSERT-Anweisung”

Sie verwenden UPDATE anstelle von INSERT :

 cursor.execute('UPDATE Words SET f1=?, f2=? WHERE rowid=?', [2, 3, rowid]) 

Dies sagt der Datenbank, die f1 und f2 Spalten mit neuen Werten zu aktualisieren, für alle Zeilen, in denen rowid mit dem angegebenen Wert übereinstimmt.

Alternativ können INSERT OR REPLACE Syntax INSERT OR REPLACE . Wenn eine Eindeutigkeitsbeschränkung (wie der Primärschlüssel nicht eindeutig ist) verletzt wird, wird stattdessen ein UPDATE ausgegeben, aber wenn rowid noch nicht vorhanden ist, wird eine neue Zeile eingefügt:

 cursor.execute('INSERT OR REPLACE INTO Words(rowid,f1,f2) VALUES(?,?,?)', [rowid,2,3]) 
  • Python sqlite3 String Formatierung
  • Wie soll ich Spaltennamen in pysqlite parametrieren, um SQL Injection zu vermeiden
  • Sqlite3 Aktualisierungszeile, definiert durch eine Variable
  • Lesen von sqlite3 entfernten Datenbanken
  • Ich kann nicht Pythons ExecuteMany für sqlite3, um richtig zu arbeiten
  • Parameter nicht unterstützt beim Einfügen von int in sqlite
  • Konvertieren von datetime-Feldern in Chrome History-Datei (sqlite) in lesbares Format
  • Force Python auf native sqlite3 verzichten und die (installierte) neueste sqlite3 Version verwenden
  • Warum funktionieren meine sqlite3 Fremdschlüssel nicht?
  • Kann ich eine spätere Version von sqlite3 mit Python verwenden?
  • Was ist der optimierte Weg, um eine große Anzahl von Datensätzen (mehr als 40.000) in sqlite3 einzufügen
  • Python ist die beste Programmiersprache der Welt.