2017-05-05 25 views
0

我只編程了幾個月,所以請原諒我,如果這是顯而易見的。爲什麼SQLite試圖使用表單條目作爲列名?

我有一個問題,我有一個使用wtforms構建的本地網站,我試圖做一些簡單的事情,如採取表單數據並將其添加到現有的本地數據庫。

我在測試表單時不斷收到錯誤。似乎sqlite試圖使用form.field.data entry作爲列名。有人能告訴我如何解決這個問題嗎? 代碼如下:

if request.method == 'POST' and form.validate(): 

    name = form.Name.data 
    street = form.StreetAddress.data 
    city = form.City.data 
    zipcode = str(form.Zip.data) 
    bedroom = str(form.Bedroom.data) 
    bathroom = str(form.Bathroom.data) 
    sqFt = str(form.SqFt.data) 
    price = str(form.Price.data) 
    typeID = str(form.TypeID.data) 
    imageLink = str(form.ImageLink.data) 

    command = """INSERT INTO Rentals(ID,Name,StreetAddress,City,Zip,Bedroom,Bathroom,SqFt,PriceMonth,TypeID,ImageLink) 
    VALUES({e},{f},{g},{h},'{i}','{j}','{k}','{l}','{m}','{n}',{u}) 
    """.format(e=rental_id, f=name, g=street,h=city, i=zipcode, j=bedroom, k=bathroom, l=sqFt, m=price, n=typeID,u=imageLink) 
    cursor.execute(command) 
    conn.commit() 

我得到的錯誤是:

cursor.execute(command) 
sqlite3.OperationalError: no such column: x 
127.0.0.1 - - [05/May/2017 08:28:52] "POST /rental_create HTTP/1.1" 500 - 

x是我進入測試形式。

這是我的第一個項目之一,我有很多樂趣',直到這。我將不勝感激任何幫助。謝謝。

+1

我懷疑它可能是一個引用問題 - 你有一些引用的值(i,j,k,l,m,n),但不是其他的(e,f,g,h,u)。也許數據庫看到一個沒有引號的'x',並假定它應該是一個列名? –

回答

1

更好的使用語法如下:

cursor.execute('INSERT INTO Log' \ 
       ' (tmstmp, typ, conid, tel, tel_pb, num_int, num_ext, dur, sip, finished)' \ 
       ' VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?)', 
       (msg.tmstmp, msg.typ, msg.conid, msg.tel, msg.tel_pb, msg.num_int, msg.num_ext, msg.dur, msg.sip, msg.finished)) 

https://docs.python.org/2/library/sqlite3.html更多的例子。

+0

謝謝!這解決了它。我仍然不知道爲什麼原文不起作用,但至少我可以繼續前進。非常感激。 – goofy564

+1

什麼變量被設置爲「x」?是「form.Name.data」!那將是「f」。而「f」必須是一個數字 - 它不在引號中。並且:如果我的答案解決了您的問題,請將其標記爲「已回答」。 – dede

+0

抱歉。標記爲已回答。沒有變量被設置爲「x」,我只是在測試時向表單輸入「x」。 「x」是從該表中抽取的表單數據。 – goofy564