sqlite3.Warning:您一次只能执行一条语句

时间:2013-03-20 01:46:21

标签: python sqlite

运行此代码时出现错误:

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)

为什么会这样?

6 个答案:

答案 0 :(得分:15)

虽然其他海报对于您的语句格式是正确的,但您正在接收此特定错误,因为您尝试在一个查询中执行多个语句(请注意查询中分隔语句的;)。

来自Python sqlite3 docs:

  

“execute()只会执行一个SQL语句。如果你尝试执行多个SQL语句   用它声明,它会引发警告。如果要执行,请使用executioncript()   一次调用多个SQL语句。“

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

现在,即使您使用executioncript(),您的语句也无法正确执行,因为格式化方式存在其他问题(请参阅其他已发布的答案)。但是您收到的错误特别是因为您的多个语句。我正在为搜索该错误后可能在这里闲逛的其他人发布此答案。

答案 1 :(得分:13)

使用executescript代替execute

  

execute()只执行一个SQL语句。如果您尝试使用它执行多个语句,则会引发警告。如果要通过一次调用执行多个SQL语句,请使用execucript()。

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

答案 2 :(得分:4)

查询字符串中间有一个;, - 这是一种无效的语法。如果要使用命名参数绑定,请将字典作为第二个参数传递给execute

sql = "INSERT INTO customer (name, email) VALUES (:name, :email)"
cursor.execute(sql, {'name':user_name, 'email':user_email})

答案 3 :(得分:0)

试试这个:

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

cursor.execute(sql, (user_name, user_email))

答案 4 :(得分:-2)

从这里获取http://zetcode.com/db/sqlitepythontutorial/尝试:

import sqlite3

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

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

    cursor.execute("INSERT INTO customer (name TEXT, email TEXT)")
    cursor.execute("INSERT INTO customer VALUES ({0}, {1})" .format(user_name, user_email))

答案 5 :(得分:-2)

pasteFromWordRemoveStyles