【问题标题】:Cursor.execute data adds single quotes marks and breaks query that contains IN(1,2) statement with mysql in pythonCursor.execute 数据在 python 中添加单引号并中断包含 IN(1,2) 语句的查询
【发布时间】:2020-02-17 03:23:32
【问题描述】:

感谢阅读。 我在尝试将变量发送到 cursor.execute(query,variable) 时遇到问题。查询包含 IN (%s) 语句,变量包含 ints 逗号分隔。 当 python 执行显然向变量添加单引号时会出现问题。它打破了查询。所以... 如何覆盖此行为以丢弃引号?

查询: 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;

数据

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'”) 结果 = self._query(查询)

再次感谢

【问题讨论】:

    标签: python mysql variables select cursor


    【解决方案1】:

    您需要在查询中添加占位符 %s
    然后变量将进入适当的位置。

    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)
    

    【讨论】:

    • 谢谢亚当,你是一个非常好的人。你回答得很快,而且是对的。您的话对解决这个问题非常有用。
    • @Seba:不客气。祝你编码愉快。
    猜你喜欢
    • 2020-01-31
    • 2017-04-23
    • 2012-10-31
    • 2015-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-10-11
    • 1970-01-01
    相关资源
    最近更新 更多