Данные Cursor.execute добавляют одинарные кавычки и запросы на разрывы, содержащие оператор IN (1,2) с mysql в python - PullRequest
1 голос
/ 17 февраля 2020

спасибо за чтение. У меня есть проблема при попытке отправить переменную к cursor.execute (запрос, переменная). Запрос содержит позицию IN (% s), а переменная содержит разделенные запятыми значения. Проблема возникает, когда выполнение питонов, очевидно, добавляет одинарные кавычки в переменную. Это нарушает запрос. Итак ... Как мне переопределить это поведение для удаления кавычек?

query : review_authors =

SELECT   autor.id, autor.escuela, autor.nombre, count(*) 
FROM     autor, cita, obra 
WHERE    obra.autor=autor.id 
AND      cita.obra=obra.id 
AND      cita.id in ( %s ) 
GROUP BY autor.id, autor.escuela, autor.nombre 
ORDER BY autor.nombre ASC;

data :

citaid=request.cookies.get("idNote")

cursor.execute :

Cursor.execute(review_authors, citaid)

информированная ошибка :

C: \ Users \ sebap \ Web \ venv \ lib \ site-packages \ pymysql \ cursors.py: 170: Предупреждение: (1292, "Усеченное неверное значение DOUBLE: '5302,5303,354,501'") result = self._query (query)

еще раз спасибо

1 Ответ

0 голосов
/ 17 февраля 2020

Что вам нужно сделать, это вставить заполнитель %s в ваш запрос.
Тогда переменные go займут свои места.

citaid=request.cookies.get("idNote")
placeholders = ",".join(['%s']*len(citaid)) 
review_authors = """SELECT autor.id, autor.escuela, autor.nombre, COUNT(*) 
                    FROM autor, cita, obra 
                    WHERE obra.autor=autor.id 
                        AND cita.obra=obra.id 
                        AND cita.id in ({}) 
                    GROUP BY autor.id, autor.escuela, autor.nombre 
                    ORDER BY autor.nombre ASC;""".format(placeholders)
Cursor.execute(review_authors, citaid)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...