sqlite3.OperationalError?
Hallo,
Meine Database wurde wie folgt erstellt: CREATE TABLE beobachtungen (
Spezies STRING,
Anzahl INTEGER,
Geschlecht STRING,
[Alter] DECIMAL,
Datum DATE,
Time TIME,
Wetter STRING,
Bemerkungen STRING,
Lokation STRING,
Photo STRING
);
Nun möchte ich mittels Python Daten hinzufügen:
>>> cmd = """INSERT INTO beobachtungen (spezies, anzahl, geschlecht, alter, datum, uhrzeit, wetter, bemerkungen, lokation, photo) VALUES (spezies, anzahl, geschlecht, alter, datum, uhrzeit, wetter, bemerkungen, lokation, photo);"""
>>> cursor.execute(cmd)
Bekomme aber folgende Fehlermeldung:
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
sqlite3.OperationalError: near "alter": syntax error
Woran liegt das?
Nutze Python 2.7.15rc1 und Sqlite 3.22.0
Danke,
TimeMen
1 Antwort
Groß und Kleinschreibung fehlerhaft?
Spezies STRING,
und im Code verwendest du
INSERT INTO beobachtungen (spezies, ...
Weiß grad nicht auswendig ob SQLite case-sensitive ist oder nicht. Später bei
... VALUES (spezies, ...
willst du wahrscheinlich Variablennamen verwenden. Die werden aber nicht aufgelöst! Daher versuchst du den String alter in das DB-Feld Alter zu schreiben!
Die selbe Idee ist mir gerade auch gekommen. Ich glaube nicht, dass es case-sensitive ist.
Demnach müsste das dann so ausschauen?
[code]sql_command = """INSERT INTO beobachtungen(Spezies, Anzahl, Geschlecht, Alter, Datum, Uhrzeit, Wetter, Bemerkungen, Lokation, Photo) VALUES (""", spezies, ", ", "anzahl", ", ", geschlecht, ", ", alter, ", ", datum, ", ", uhrzeit, ", ", wetter, ", ", bemerkungen, ", ", lokation, ", ", photo, ");"[/code]
Die dazugehörige Ausgabe dann:
[code]('INSERT INTO beobachtungen(Spezies, Anzahl, Geschlecht, Alter, Datum, Uhrzeit, Wetter, Bemerkungen, Lokation, Photo) VALUES (', u'Blauracke', ', ', 'anzahl', ', ', u'm\xe4nnlich', ', ', 1.6, ', ', '12.06.2018', ', ', '12:32', ', ', u'regnerisch, 9\xb0C', ', ', u'aufgeplustert, dicht beieinander sitzend', ', ', u'Hornberg, Drachenwald', ', ', u'blauracke-hornberg.jpg', ');')[/code]
Und ja, das Problem mit Sonderzeichen muss ich auch noch lösen.
So:
>>> s = "bla"
>>> d = 123
>>> print("insert into s, d values ('" + s + "', " + str(d) + ")")
insert into s, d values ('bla', 123)
und nicht so:
>>> print("insert into s, d values (s, d)")
insert into s, d values (s, d)
>>> print("""insert into s, d values (s, d)""")
insert into s, d values (s, d)