2017-05-05 12 views
0

私は数ヶ月しかプログラミングしていないので、これが明らかであれば私を許してください。SQLiteがフォームエントリを列名として使用しようとしているのはなぜですか?

私はwtformsで構築されたローカルWebサイトを持っている問題があります。フォームデータを取り出して既存のローカルデータベースに追加するような単純な作業をしようとしています。

フォームをテストするとエラーが発生します。 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つです。私はこれまで多くの楽しみを持っていました。助けていただければ幸いです。ありがとう。

+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

関連する問題