2017-12-18 3 views
0

私はPythonからSQLデータベースをクエリしようとしました。 私は文字列中のfilterの値を直接harcodeし、iをqueryとして渡すと、クエリが適切です。 しかし、私が "%s"のような書式指定子を使用するとき、私は問題に直面しています。Pythonからmysqlに渡されたselectクエリの値で置き換えられないフォーマット指定子

[import tkinter 
import tkinter.messagebox 
from tkinter import * 
import mysql.connector 

top = tkinter.Tk() 

#database connecion 
from mysql.connector import errorcode 
try: 
    cnx =mysql.connector.connect(host='localhost',user='root',password='1234') 
    cur = cnx.cursor() 
    query="CREATE DATABASE IF NOT EXISTS prj_db" 
    cur.execute(query) 
    cnx =mysql.connector.connect(host='localhost',database='prj_db',user='root',password='1234') 
except mysql.connector.Error as err: 
    if err.errno == errorcode.ER_ACCESS_DENIED_ERROR: 
    print("Something is wrong with your user name or password") 
    elif err.errno == errorcode.ER_BAD_DB_ERROR: 
    print("no db") 
    else: 
    print(err) 
else: 
    cur = cnx.cursor() 
    query = ("CREATE TABLE IF NOT EXISTS product_det_2" 
      "(P_id INT(4) UNSIGNED ZEROFILL NOT NULL AUTO_INCREMENT," 
      "P_name CHAR(20) DEFAULT '' NOT NULL," 
      "Drawing_num CHAR(20) DEFAULT '' NOT NULL," 
      "Price INT(4) UNSIGNED ZEROFILL NOT NULL," 
      "PRIMARY KEY(P_id))") 
    cur.execute(query) 
query = ("SELECT * FROM product_det_2") 
cur.execute(query) 
print(query) 
for (P_id, P_name, Drawing_num,Price) in cur: 
     print("{}, {}, {},{}".format(P_id, P_name, Drawing_num,Price)) 
print("*********************************") 
query = ("SELECT * FROM product_det_2 WHERE P_id=2") 
print(query) 
cur.execute(query) 
for (P_id, P_name, Drawing_num,Price) in cur: 
     print("{}, {}, {},{}".format(P_id, P_name, Drawing_num,Price)) 
print("*********************************") 
a="2" 
query = ("SELECT * FROM product_det_2 WHERE P_id=%s") 
print(query) 
cur.execute(query,a) 
for (P_id, P_name, Drawing_num,Price) in cur: 
     print("{}, {}, {},{}".format(P_id, P_name, Drawing_num,Price)) 
cnx.commit() 
top.mainloop()][1] 

iはフォーマット指定と、A = 2として%dを与える場合であっても、私はエラーに直面していますここで、以下のように

コードです。 私が間違っenter image description here

答えて

1

cursor.execute()への第2引数はタプルまたは辞書でなければなりませんつもりですどこ私に知らせてください。これは、クエリに挿入するパラメータが1つでもある場合でも適用されます。これを試してください:

cur.execute(query, (a,)) 

ここでは、単一要素を含むタプルが​​に渡されます。

+0

ありがとうございました – jeyshree

関連する問題