спецификаторы формата не заменяются значениями в запросе select, передаваемом в mysql из python

0

Я попытался запросить базу данных sql из python. когда я передаю значения фильтра непосредственно в строке и передаю я в качестве запроса, запрос правильный. однако, когда я использую спецификаторы форматирования, такие как "% s", я сталкиваюсь с проблемами.

код выглядит следующим образом

[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]

здесь, если я даю% d в качестве спецификатора формата и a = 2, даже тогда я столкнулся с ошибкой. пожалуйста, дайте мне знать, где я буду неправильно ввести описание изображения здесь

Теги:

1 ответ

1

Второй аргумент cursor.execute() должен быть кортежем или словарем. Это применимо даже в том случае, если в запрос вводится один параметр. Попробуй это:

cur.execute(query, (a,))

Здесь в execute() передается кортеж, содержащий один элемент.

  • 0
    Спасибо, это сработало

Ещё вопросы

Сообщество Overcoder
Наверх
Меню