2013-03-20 12 views
5

pojawia się błąd, gdy uruchomiony ten kod:sqlite3.Warning: Można wykonać tylko jedno oświadczenie w czasie

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) 

Dlaczego tak się dzieje?

+0

Od kiedy użyłem sqlite3 w Pythonie, pamiętam kwerendy i parametry mające być odsunięte, a nie pojedynczy łańcuch. Może spróbuj tego? – Patashu

Odpowiedz

3

Masz ;, w środku łańcucha zapytania - to jest nieprawidłowa składnia. Przekaż słownik jako drugi argument do execute, jeśli chcesz użyć powiązania nazwanego parametru.

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

To działa. Ale nie rozumiem, dlaczego to nie zadziała: 'sql =" WSTAW NA klienta (imię i nazwisko, adres e-mail) VALUES (nazwa_użytkownika, user_email) " cursor.execute (sql)' – spamup

+0

Ponieważ nie ma interpolacji parametrów dla Zapytanie. Powinno to być coś w stylu 'sql =" INSERT INTO customer (name, email) VALUES ('% s', '% s') "% (nazwa_użytkownika, user_email) –

0

dojazd stąd 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)) 
13

Podczas gdy inne plakaty są poprawne o wyciągu formatowania otrzymujesz ten konkretny błąd, ponieważ próbujesz wykonać wiele instrukcji w jednym zapytaniu (zawiadomienie ; w zapytaniu, które oddziela wyciągi).

z Pythona Sqlite3 docs..

„execute() wykona tylko jedną instrukcję SQL Jeśli spróbujesz wykonać więcej niż jeden oświadczenie z nim, to podniesie Ostrzeżenie Użyj executescript() jeśli chcesz wykonać wiele różnych instrukcji SQL jednym wywołaniem. "

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

Teraz swoje oświadczenie nie zostanie wykonane prawidłowo, nawet jeśli używasz executescript(), ponieważ istnieją inne problemy z drogi jest sformatowany (patrz innych pisał odpowiedzi). Ale błąd, który otrzymujesz, wynika właśnie z wielu zdań. Publikuję tę odpowiedź dla innych osób, które mogły tu wędrować po wyszukaniu tego błędu.

Powiązane problemy