26

このコードを実行すると、次のエラーが表示されます。

import sqlite3

user_name = raw_input("Please enter the name: ")
user_email = raw_input("Please enter the email: ")

db = sqlite3.connect("customer")
cursor=db.cursor()

sql = """INSERT INTO customer
        (name, email) VALUES (?,?);, 
        (user_name, user_email)"""

cursor.execute(sql)

なぜこうなった?

4

5 に答える 5

46

ステートメントのフォーマットについて他の投稿者は正しいですが、1 つのクエリで複数のステートメントを実行しようとしているため、この特定のエラーが発生しています (ステートメントを区切るクエリの ; に注意してください)。

Python sqlite3 ドキュメントから:

「execute() は単一の SQL ステートメントのみを実行します。それを使用して複数のステートメントを実行しようとすると、警告が発生します。1 回の呼び出しで複数の SQL ステートメントを実行する場合は、executescript() を使用してください。」

https://docs.python.org/2/library/sqlite3.html

executescript() を使用しても、ステートメントのフォーマット方法には他の問題があるため、ステートメントは正しく実行されません (他の投稿された回答を参照)。しかし、あなたが受け取っているエラーは、複数のステートメントが原因です。そのエラーを検索した後にここをさまよった可能性のある他の人のために、この回答を投稿しています。

于 2014-04-29T16:52:22.680 に答える
30

executescriptの代わりに使用execute

execute() は単一の SQL ステートメントのみを実行します。複数のステートメントを実行しようとすると、警告が発生します。1 回の呼び出しで複数の SQL ステートメントを実行する場合は、executescript() を使用します。

https://docs.python.org/2/library/sqlite3.html#sqlite3.Cursor.execute

于 2016-01-15T08:15:45.250 に答える
7

;,クエリ文字列の途中に があります。これは無効な構文です。execute名前付きパラメータ バインディングを使用する場合は、辞書を 2 番目の引数として渡します。

sql = "INSERT INTO customer (name, email) VALUES (:name, :email)"
cursor.execute(sql, {'name':user_name, 'email':user_email})
于 2013-03-20T01:55:43.860 に答える