Ok Ich versuche, eine vorhandene SQLite3 Datenbank mit Instanzvariablen (typ und lvl) zu aktualisieren, um im GrundeVerwenden von Instanzvariablen in SQLite3 update?
#Set variables
typ = 'Test'
lvl = 6
#Print Databse
print("\nHere's a listing of all the records in the table:\n")
for row in cursor.execute("SELECT rowid, * FROM fieldmap ORDER BY rowid"):
print(row)
#Update Info
sql = """
UPDATE fieldmap
SET buildtype = typ, buildlevel = lvl
WHERE rowid = 11
"""
cursor.execute(sql)
#Print Databse
print("\nHere's a listing of all the records in the table:\n")
for row in cursor.execute("SELECT rowid, * FROM fieldmap ORDER BY rowid"):
print(row)
als Fehler Ich erhalte
sqlite3.OperationalError: no such column: typ
Jetzt weiß ich im Grunde das Problem ist, dass meine Variable mit der falschen Syntax eingefügt wird, aber ich kann nicht für das Leben von mir das richtige finden. Es arbeitet mit Streichern und Ints ganz gut so:
sql = """
UPDATE fieldmap
SET buildtype = 'house', buildlevel = 3
WHERE rowid = 11
"""
Aber sobald ich auf die Variablen schalten sie den Fehler auslöst.
In Ordnung klingt vielversprechend, ich werde einen Blick darauf werfen! – Syntic
** NIEMALS ** verwenden Sie '% s' oder' str.format' in SQL-Befehlen, die an Ihre Datenbank übergeben werden. Es ist anfällig für SQL-Injektion. – aim100k
@ aim100k Ja, wir wissen es. Deshalb verwenden wir ORM anstelle von Hardcoding. Doch diejenigen, die sich hauptsächlich für die Injektion interessieren, würden ihr eigenes SQL-ORM außer SQLAlchemy verwenden. – dotslash