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

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

来自 Python sqlite3 文档:

“execute() 只会执行一条 SQL 语句。如果您尝试使用它执行多个语句,它将引发警告。如果您想通过一次调用执行多个 SQL 语句,请使用 executescript()。”

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

现在,即使您使用 executescript(),您的语句也不会正确执行,因为它的格式化方式存在其他问题(请参阅其他发布的答案)。但是您收到的错误特别是由于您的多个陈述。我正在为其他可能在搜索该错误后徘徊在这里的其他人发布此答案。

于 2014-04-29T16:52:22.680 回答
30

使用executescript代替execute

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

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

于 2016-01-15T08:15:45.250 回答
7

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

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

试试这个:

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

cursor.execute(sql, (user_name, user_email))
于 2018-05-11T16:47:46.857 回答
-4
import sqlite3
def DB():    
    List = {"Name":"Omar", "Age":"33"}

    columns = ', '.join("" + str(x).replace('/', '_') + "" for x in List.keys())     
    values = ', '.join("'" + str(x).replace('/', '_') + "'" for x in List.values())

    sql_qry = "INSERT INTO %s ( %s ) values (?,?) ; ( %s )" % ('Table Name', columns, values)


    conn = sqlite3.connect("DBname.db")
    curr = conn.cursor()
#     curr.execute("""create table if not exists TestTable(
#                         Name text, 
#                         Age text
#                         )""")

#     print columns
#     print values
#     print sql



    #     sql = 'INSERT INTO yell (Name , Age) values (%s, %s)'
    curr.execute(sql_qry)    
DB()
于 2020-01-08T23:52:21.107 回答