0

この SQL コマンドの呼び出しに問題があります。「OperationalError: near "'0-0'": syntax error」というメッセージが表示されます。

私の呼び出しは次のとおりです。

users_db_curs.execute("INSERT INTO `"+table_name+"` (uID, username, password, creator_exp, location) 
VALUES ('"+user_ID+"', '"+username+"', '"+password+"', '"+creator_exp+"', '0-0')")
4

2 に答える 2

1

ステートメントをテストしましたが、さまざまな変数がステートメント文字列リテラルで直接連結されるように正しくフォーマットされていれば、正常に動作するはずです

>>> import sqlite3
>>> conn = sqlite3.connect(':memory:')
>>> cu = conn.cursor()
>>> cu.execute('create table foo (uID, username, password, creator_exp, location)')
<sqlite3.Cursor object at 0x7fccc2c115e0>
>>> user_ID='a'
>>> username='b'
>>> password='c'
>>> creator_exp='d'
>>> table_name='foo'
>>> cu.execute("INSERT INTO `"+table_name+"` (uID, username, password, creator_exp, location) VALUES ('"+user_ID+"', '"+username+"', '"+password+"', '"+creator_exp+"', '0-0')")
<sqlite3.Cursor object at 0x7fccc2c115e0>

あなたがそれを得るとき、それはおそらくそうではありませんsyntax error

>>> username="'barf"
>>> cu.execute("INSERT INTO `"+table_name+"` (uID, username, password, creator_exp, location) VALUES ('"+user_ID+"', '"+username+"', '"+password+"', '"+creator_exp+"', '0-0')")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
sqlite3.OperationalError: near "barf": syntax error

そのため、代わりにフォーマットされたパラメーターを使用してください。

>>> cu.execute("INSERT INTO `"+table_name+"` (uID, username, password, creator_exp, location) VALUES (?, ?, ?, ?, '0-0')", 
(user_ID, username, password, creator_exp))
<sqlite3.Cursor object at 0x7fccc2c115e0
于 2012-05-06T10:18:40.777 に答える