Python создает динамический оператор выбора для MySQL

0

В моей базе данных MySQL у меня есть 10 таблиц. На основании ввода пользователя я хочу выбрать строки из одной таблицы. Пользовательский ввод - это изображение. Я получаю количество столбцов и строк пикселей, которые имеет изображение, и сохраняю их в переменной.

rows,cols,channels = img.shape
w = int(cols)
h = int(rows)
l = w-10
m = w+10
p = h-10
q = h+10
area = w*h

таблицы mysql создаются на основе области изображения, и, следовательно, в зависимости от области я хочу выбрать значения из конкретной таблицы.

if (area < 110980):
        sql = "select * from adf1 where WIDTH between %s and %s and HEIGHT between %s and %s;",(l,m,p,q)
    elif (area < 182520):
        sql = "select * from adf2 where WIDTH between %s and %s and HEIGHT between %s and %s;",(l,m,p,q)
else:
        sql = "select * from adf10 where WIDTH between %s and %s and HEIGHT between %s and %s;",(l,m,p,q)
cur = mysql.connect().cursor()
cur.execute(sql)

Я получаю следующую ошибку:

TypeError: cannot concatenate 'str' and 'tuple' objects

Однако, когда я cur.execute один запрос в cur.execute я могу получить результаты.

cur.execute("select * from adf10 where WIDTH between %s and %s and HEIGHT between %s and %s;",(l,m,p,q))
Теги:

2 ответа

1
Лучший ответ

текущая переменная sql является кортежем, поэтому, если вы хотите передать ее в качестве параметров для execute вы должны использовать *

cur.execute(*sql)

вы можете прочитать больше в doc unpacking-arguments-lists

  • 0
    Спасибо за ответ и ссылку на документ, это работает ... примет ваш ответ через 5 минут
  • 0
    рад помочь вам
0

это должно решить вашу проблему. Вы должны использовать % не запятую в запросах внутри if else.

"select * from adf2 where WIDTH between %s and %s and HEIGHT between %s and %s;"%(l,m,p,q)

Ещё вопросы

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