Python pymysql占位符打破使用WHILE列IN(设置)查询

时间:2018-04-27 14:30:09

标签: python mysql string pymysql

我使用pymysql使用占位符查询MySQL数据库。它运作良好。我有一个查询引发警告,因为在将参数加载到查询中时处理字符串的方式:

我的示例代码:

thing_ids = "1, 2, 3, 4"
list_notes = db_get_list("SELECT n.note_id, n.note_info, ... FROM note n, contact c WHERE n.note_created_by=c.contact_id AND n.note_on_thing_id IN (%s)", (thing_ids, ))

和db_get_list是:

def db_get_list(self, sql, args=None):
    with self.connection.cursor() as cursor:
        cursor.execute(sql, args)
        return cursor.fetchall()

提出的警告是:

/Library/Python/2.7/site-packages/pymysql/cursors.py:323: 
Warning: (1292, u"Truncated incorrect DOUBLE value: '1, 2, 3, 4'")

我在控制台上用MySQL做了一些调试。当我运行查询结束时:

WHERE .... AND n.note_on_thing_id IN ('1, 2, 3, 4')

我收到了警告。当我运行查询结束时:

WHERE .... AND n.note_on_thing_id IN (1, 2, 3, 4)

(没有引号)没有警告。

如何将参数传递给cursor.execute()并在这种情况下询问它不要用'引号包装查询' (每隔一次我想传递它和今天一样!)。

我在文档中看到了其他%选项,例如%d,%g - 但这些似乎仅在变量是整数类型而不是字符串类型时才起作用。该字符串将始终是一个字符串,其中包含逗号分隔的整数(它们代表列的主键ID)。

0 个答案:

没有答案