2015-06-20 10 views
6

Grałem około z sqlite3 i dostaję sqlite3.OperationalError: w pobliżu „słodki”: błąd składni dla tej linii mojego kodu query_cursor.execute("INSERT INTO mcdonalds_menu VALUES(%d, %s, %f, %s, %d)" % (ids[num],names[num], price[num], descriptions[num], calories[num])) Kiedy kładę się w wartościach 3 oddzielne zapytania wydaje się, że kod działa, ale staram się, aby mój kod był bardziej SUROWY, używając pętli for. Kod do tej pory:ciąg formatowanie kwerendy SQL w sqlite3

import sqlite3 

filename = sqlite3.connect("McDonalds_Menu.db") 
query_cursor = filename.cursor() 

def create_table(): 
    query_cursor.execute("CREATE TABLE mcdonalds_menu (id INTEGER, name VARCHAR(20), price DECIMAL(3, 2), description TEXT, calories INTEGER)") 

ids = range(1,4) 
names = ["McFlurry", "Fillet-o-Fish", "McCafe"] 
price = 1.50, 2.25, 0.99 
descriptions = ["Delicious sweet icecream", "Best fish in the sea", "Freshly brewed Colombian coffee"] 
calories = 220, 450, 75 

def data_entry(): 
    for num in xrange(3): 
     query_cursor.execute("INSERT INTO mcdonalds_menu VALUES(%d, %s, %f, %s, %d)" % (ids[num], names[num], price[num], descriptions[num], calories[num]))  
    filename.commit() 

if __name__ == "__main__": 
    create_table() 
    data_entry() 

Czy można sformatować zapytanie sql za pomocą pętli?

Odpowiedz

3

Łańcuchy zapytania SQL w VALUES do cytowania. Liczby całkowite i liczby zmiennoprzecinkowe nie muszą być kwotowane.

W komentowanym wyjściu poniżej, zauważysz, że SQL VALUES zawiera nienotowanych ciągi dla „Filet-o-Fish” i „Najlepsza ryba w morzu”:

sql = "INSERT INTO mcdonalds_menu VALUES(%d, %s, %f, %s, %d)".format(ids[num], names[num], price[num], descriptions[num], calories[num]) 
# INSERT INTO mcdonalds_menu VALUES(2, Fillet-o-Fish, 2.250000, Best fish in the sea, 450) 

dodając kilka uciekł cytaty wokół wartości ciągów generuje poprawny kod SQL:

sql = "INSERT INTO mcdonalds_menu VALUES(%d, \"%s\", %f, \"%s\", %d)" % (ids[num],names[num], price[num], descriptions[num], calories[num]) 
# INSERT INTO mcdonalds_menu VALUES(2, "Fillet-o-Fish", 2.250000, "Best fish in the sea", 450) 
+0

Dziękuję, rozwiązał mój problem. –

+0

Nie ma za co. Cieszę się, że to działało! – Grokify

Powiązane problemy