我有一个关于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吗?当我对我想要使用的列进行硬编码时,它会返回我想要的数据但是当我尝试这样做时,它只返回[]。任何帮助表示赞赏。
答案 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,))