sqlite3.Warning: за один раз можно выполнить только одну инструкцию

Я получаю ошибку при запуске этого кода:

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)

Почему это происходит?

5 ответов

В то время как другие авторы верны в отношении форматирования вашего оператора, вы получаете эту конкретную ошибку, потому что вы пытаетесь выполнить несколько операторов в одном запросе (обратите внимание на; в вашем запросе, который разделяет операторы).

Из документов Python sqlite3:

"execute () будет выполнять только один оператор SQL. Если вы попытаетесь выполнить с ним более одного оператора, появится предупреждение. Используйте executetescript(), если вы хотите выполнить несколько операторов SQL одним вызовом".

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

Теперь ваше утверждение не будет выполняться должным образом, даже если вы используете executetescript(), потому что существуют другие проблемы с его форматированием (см. Другие опубликованные ответы). Но ошибка, которую вы получаете, связана именно с вашими многочисленными утверждениями. Я публикую этот ответ для других, которые могли заблудиться здесь после поиска этой ошибки.

Использование executescript вместо execute

execute() будет выполнять только один оператор SQL. Если вы попытаетесь выполнить более одного оператора с ним, появится предупреждение. Используйте executetescript(), если вы хотите выполнить несколько операторов SQL одним вызовом.

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

У тебя есть ;, в середине строки запроса - это неверный синтаксис. Передайте словарь в качестве второго аргумента execute если вы хотите использовать привязку именованного параметра.

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

Попробуй это:

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

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

Как добраться отсюда http://zetcode.com/db/sqlitepythontutorial/ try:

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))
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()
Другие вопросы по тегам