在Python中进行mysql查询时如何删除变量周围的单引号?

时间:2017-07-10 19:53:50

标签: python mysql flask

我有一个关于mysql的问题在Python中使用。基本上我在使用flask的网页上有一个下拉菜单,它提供了更改mysql查询的参数。这是我的问题的代码片段。

select = request.form.get('option')
select_2 = request.form.get('option_2')
conn = mysql.connect()
cursor = conn.cursor()
query = "SELECT * FROM tbl_user WHERE %s = %s;"
cursor.execute(query, (select, select_2))
data = cursor.fetchall()

这不返回查询中的数据,因为第一个变量周围有单个qoutes,即

Select * from tbl_user where 'user_name' = 'Adam' 

Select * from tbl_user where user_name = 'Adam'. 

有人可以解释如何为我删除这些单个qoutes吗?当我对我想要使用的列进行硬编码时,它会返回我想要的数据但是当我尝试这样做时,它只返回[]。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:1)

我有一个处理pymysql的有效解决方案,它是 重写类'pymysql.connections.Connection'中的转义方法,显然会在字符串周围添加“'” 。也许您可以尝试类似的方法,请检查以下内容:

from pymysql.connections import Connection, converters


class MyConnect(Connection):
    def escape(self, obj, mapping=None):
        """Escape whatever value you pass to it.

        Non-standard, for internal use; do not use this in your applications.
        """
        if isinstance(obj, str):
            return self.escape_string(obj)  # by default, it is :return "'" + self.escape_string(obj) + "'"
        if isinstance(obj, (bytes, bytearray)):
            ret = self._quote_bytes(obj)
            if self._binary_prefix:
                ret = "_binary" + ret
            return ret
        return converters.escape_item(obj, self.charset, mapping=mapping)


config = {'host':'', 'user':'', ...}
conn = MyConnect(**config)
cur = conn.cursor()

答案 1 :(得分:0)

cursor.execute添加了引号,但str.format没有。我愿意:

query = "SELECT * FROM tbl_user WHERE {} = %s;".format(select)

然后

cursor.execute(query, (select_2,))