2017-06-10 4 views
0

Ich habe die folgende Abfrage:Konvertieren MySQL Query Um SQLite Abfrage

INSERT INTO Test (Test1, Test2, Test3, Test4) VALUES (5, 5, 5, 55) ON duplicate KEY UPDATE Test1 = VALUES(5); 

Dies funktioniert gut auf MySQL, aber ich bekomme einen Syntaxfehler auf SQLite, meine Frage (n) sind: (1) Wie werde ich konvertieren diese Abfrage, um mit SQLite zu arbeiten, während sie ihre Funktionalität bereitstellt (2) Wie aktualisiere ich mehrere Felder im Falle eines Duplikats?

+0

Bitte erklären Sie in der Prosa, was das erreichen soll. Meine Erfahrung ist mit SQLite und ich kann nur bestätigen "Sieht nicht wie bekannte Syntax aus." Es wäre auch hilfreich, die '.dump'-Datei (aus dem SQLite-Befehlszeilentool) einer passend zugeschnittenen Spielzeugdatenbank zur Verfügung zu stellen. I.e. etwas von einem [mcve]. – Yunnosch

+0

Mögliches Duplikat von [SQLite UPSERT - ON DUPLICATE KEY UPDATE] (https://stackoverflow.com/questions/2717590/sqlite-upsert-on-duplicate-key-update) – hassan

Antwort

0

Es könnte möglich sein, eine komplexe INSERT OR REPLACE Abfrage zu erstellen, aber das würde immer die alte Zeile löschen, was oft nicht das ist, was Sie wollen.

Wie auch immer, SQLite ist eine eingebettete Datenbank und entworfen, um zusammen mit einer "echten" Programmiersprache verwendet zu werden. Verwenden Sie einfach zwei separate Anweisungen:

db.execute('UPDATE Test SET Test1 = 5 WHERE ID = 42') 
if db.rowcount == 0: 
    db.execute('INSERT INTO Test(ID, Test1) VALUES (42, 5)')