Re: SQLite 3 Wert eines Tables auf anderen Table verweisen
Verfasst: Montag 18. Juni 2012, 16:31
Strange, ich habs mal getestet, aber es funzt net!
Wie du sagtest, hab ichs mit dem ON DELETE CASCADE Statement getestet. Entweder es wird die Acc oder Customerzeile gelöscht! Je nachdem welche der beiden Methoden ich aufrufe(deleteAcc/Cust)
Ich denke, die Syntax sollte korrekt sein.
Beim erstellen des Customertables hab ich soweit nichts geändert. Google meint, ich sollte erstmal "con.execute("PRAGMA foreign_keys = ON")" nutzen, was ich auch getan hab, aber dennoch hat sich nichts getan. Er löscht partout nicht beides, sondern immer nur das eine!
Ich hab mal deinen Code genommen, dabei kommt das raus:
Vor DELETE: [(1, 500, 1), (2, 200, 1), (3, 50, 2), (4, 100, 3), (5, 200, 3), (6, 400, 3), (7, 50, 4), (8, -20, 4), (9, 10, 4)]
Nach DELETE: [(1, 500, 1), (2, 200, 1), (3, 50, 2), (4, 100, 3), (5, 200, 3), (6, 400, 3), (7, 50, 4), (8, -20, 4), (9, 10, 4)]
Ich denke, dass sollte auch so nicht sein xD
Ich kanns mir soweit nicht erklären! Ansonsten mach ich es manuell mit 2 execute Anweisungen. Je eine für Accounts und Customer in einer Methode. Allerdings bin ich mir bei einer Sache nicht sicher. Wenn ich das ON DELETE CASCADE benutze, dann löscht er mir doch nicht auch die Customerzeile weg, wenn ich nur ne Acczeile löschen will, oder?
Langsam tendiere ich echt dazu, einfach 2 Statements in der deleteCustRow Methode zu machen...
Wie du sagtest, hab ichs mit dem ON DELETE CASCADE Statement getestet. Entweder es wird die Acc oder Customerzeile gelöscht! Je nachdem welche der beiden Methoden ich aufrufe(deleteAcc/Cust)
Ich denke, die Syntax sollte korrekt sein.
Code: Alles auswählen
self.cur.execute("DELETE FROM Customers WHERE Customernumber = (?)",custid)
Code: Alles auswählen
self.cur.execute("""CREATE TABLE Accounts (
Accountnumber TEXT, PIN INTEGER, Value INTEGER, Currency TEXT, Customernumber TEXT,
PRIMARY KEY(Accountnumber), FOREIGN KEY(Customernumber) REFERENCES Customers(Customernumber) ON DELETE CASCADE)""")
Ich hab mal deinen Code genommen, dabei kommt das raus:
Vor DELETE: [(1, 500, 1), (2, 200, 1), (3, 50, 2), (4, 100, 3), (5, 200, 3), (6, 400, 3), (7, 50, 4), (8, -20, 4), (9, 10, 4)]
Nach DELETE: [(1, 500, 1), (2, 200, 1), (3, 50, 2), (4, 100, 3), (5, 200, 3), (6, 400, 3), (7, 50, 4), (8, -20, 4), (9, 10, 4)]
Ich denke, dass sollte auch so nicht sein xD
Ich kanns mir soweit nicht erklären! Ansonsten mach ich es manuell mit 2 execute Anweisungen. Je eine für Accounts und Customer in einer Methode. Allerdings bin ich mir bei einer Sache nicht sicher. Wenn ich das ON DELETE CASCADE benutze, dann löscht er mir doch nicht auch die Customerzeile weg, wenn ich nur ne Acczeile löschen will, oder?
Langsam tendiere ich echt dazu, einfach 2 Statements in der deleteCustRow Methode zu machen...