2017-07-31 12 views
0

(?)と(%s)の両方で試しても動作していないようです。どこが間違っているのですか?関数を呼び出すPythonでMysqlのプリペアドステートメントが値に置き換えられない

def update(phone,name): 
    conn = sqlite3.connect(db) 
    print ("\nOpened database for updates successfully") 

    sql = "UPDATE VARUN set PHONE = %s where NAME= %s " 
    print (sql) 
    conn.execute(sql,(phone,name)) 
    ''' 
    conn.execute("UPDATE VARUN set PHONE = (?) where NAME= (?) ",(phone,name)); 
    ''' 
    conn.commit() 

----- ----

contactlist[selection()]=[nameVar.get(), phoneVar.get()] 
updt = (contactlist[selection()]) 
name = (updt[0]) 
phone = (updt[1]) 
print (name,phone) 

try: 
    update(name,phone) 
except: 
    tkinter.messagebox.showwarning("cannot be blank") 
else: 

    setList() 
    saveContact() 
+0

良い。 – poke

+0

@pokeそれを指摘してくれてありがとう。しかし、データベースではまだ更新されません。どのように私はこれをデバッグすることができます知っている? insertのような他の操作はうまくいきますので、データベースに問題があります。 – Varun

答えて

2

まず第一に、あなたは、エラーが関数からスローされているものを見てからあなたを防ぐbare except clauseを使用しています。それを削除し、どのように失敗するかを確認してください。

そして、あなたは周囲の括弧なし?プレースホルダを持っている必要があります:

`conn.execute( 'UPDATE VARUNが電話を設定= NAME =?'、(電話、名))`動作するはず
def update(phone, name): 
    conn = sqlite3.connect(db) 
    cursor = conn.cursor() 
    print ("\nOpened database for updates successfully") 

    sql = "UPDATE VARUN set PHONE = ? where NAME= ?" 
    cursor.execute(sql, (phone, name)) 
    conn.commit() 
+0

それを指摘してくれてありがとう。私はそれを変更した後もエラーは出ませんが、それでもデータベースでは更新されません。どのように私はこれをデバッグすることができます知っている? insertのような他の操作はうまくいきますので、データベースに問題があります。 – Varun

+0

@Varunよく、結果をチェックしているのと同じデータベース内の同じテーブルを実際に更新していることを確認してください。タイトルにmysqlが表示されていますが、sqlite3接続コードが投稿されています。 – alecxe

+0

私は十字チェックして、すべてがうまくいくようです。しかし、どういうわけかそれは挿入されません。実行されているクエリを印刷する方法はありますか?私は文字列と印刷に変換しようとしましたが、それでもオブジェクトとして印刷されます。 – Varun

関連する問題