我正在运行此代码
def details(self, dbsettings, payload):
res = None
with UseDatabase(dbsettings) as db:
sql = "select * from %(tablename)s where userid = %(userid)s"
result = db.run_query_vals(sql, payload)
res = result.fetchall()
return res
但收到错误
SQLError:1064(42000):您的SQL语法出错;检查与MariaDB服务器版本对应的手册,以便在''statuser'附近使用正确的语法,其中userid ='14''在第1行
传递的参数是:
sql = "select * from %(tablename)s where userid = %(userid)s"
payload = {'tablename' : 'statuser', 'userid' : 14}
据我了解,传递给MySQL的查询是
从'statuser'中选择*,其中userid ='14'
这是我得到错误的地方; tablename不应该用引号括起来。如何在没有引号的情况下包含名称/使它们反引号?
(我不想对表名进行硬编码 - 这是一个变量,在创建类时根据不同的参数进行初始化)。这里有什么帮助吗?
答案 0 :(得分:1)
您可以在python中使用&
字符串:
.format()
答案 1 :(得分:1)
我在pymysql中遇到了相同的问题,并找到了解决方案:
在类'pymysql.connections.Connection'中重写转义方法,显然会在字符串周围添加“'”。
仅仅分享一种可能的方法,不知道它是否对您有帮助
类似的问题:How to remove extra quotes in pymysql
这是我的代码:
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()