1

Pythonのsqliteライブラリを使用して、変数からデータベースにデータを追加したいと思います。テーブルを作成してから、sqlステートメントを実行します。これが私の簡単なコードです:

import sqlite3
db = sqlite3.connect("dbse.sqlite")
cursor= db.cursor()
cursor.execute("CREATE TABLE Myt (Test TEXT)")
variable = ('aaa')
cursor.execute('INSERT INTO Myt VALUES (?)' , variable)
db.commit()

しかし、コードを実行した後、このエラーが発生します:

cursor.execute('INSERT INTO Myt VALUES (?)' , variable)
sqlite3.ProgrammingError: Incorrect number of bindings supplied. The current statement uses 1, and there are 3 supplied.

1文字の値を含む変数を挿入すると機能しますが、複数の文字を含む変数を使用すると機能しません。私はpython3.2.3を使用しています。あなたはそれを解決するためのアイデアを持っていますか?

4

2 に答える 2

4

あなたvariableはタプルでなければなりません:

variable = ('aaa',) # Notice the comma

1要素タプルを作成するときは、最後にコンマを使用する必要があります。補足として、このtuple()メソッドを使用しても、必要なものが得られないことに注意してください。

>>> tuple('aaa')
('a', 'a', 'a')
>>> ('aaa',)
('aaa',)
于 2012-07-29T19:46:35.053 に答える
2

cursor.execute()2番目の引数がシーケンスであることを期待します。あなたvariableは文字列です。これはたまたま長さ3のシーケンスです。

>>> len(variable)
3
>>> list(variable)
['a', 'a', 'a']

これが、紛らわしいエラーメッセージの原因です。.execute3要素のシーケンスが表示され、1のみが期待されます。1.execute要素のタプルで渡します。

cursor.execute('INSERT INTO Myt VALUES (?)', (variable,))

そこにあるコンマに注意してください。

于 2012-07-29T19:49:22.303 に答える