В моей базе данных 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))
текущая переменная sql
является кортежем, поэтому, если вы хотите передать ее в качестве параметров для execute
вы должны использовать *
cur.execute(*sql)
вы можете прочитать больше в doc unpacking-arguments-lists
это должно решить вашу проблему. Вы должны использовать %
не запятую в запросах внутри if else.
"select * from adf2 where WIDTH between %s and %s and HEIGHT between %s and %s;"%(l,m,p,q)