Python中如何将tuple作为torndb查询的params参数传入?
在可知参数情况下, 向 torndb 传递查询参数:
sql = 'select * from test where id=%s and name = %s ’
row = conn.get(sql, 1,‘admin’)
# 需求 : 查询条件未知,如使用 dict
d = {
‘name=’: ‘admin’,
‘id=’: ‘1’,
# … 可能存在更多查询参数
}
where_str = ‘’ # 这里可以拼接 d 的键名,生成 where 字符串
sql = 'select * from test ’ + where_str
row = conn.get(sql, args) # 这里的args 怎么取到?
测试 将 d 的 value 放入 tuple 作为*args 传入,torndb 报错
Python中如何将tuple作为torndb查询的params参数传入?
在Python中,使用torndb进行数据库查询时,params参数期望一个序列(如列表或元组)来安全地替换SQL语句中的占位符。将tuple作为params传入是完全正确且标准的做法。
下面是一个完整的示例:
import torndb
# 假设数据库连接
db = torndb.Connection("localhost", "database_name", user="user", password="password")
# 你的tuple参数
query_params = ('value1', 'value2', 100)
# 使用%s作为占位符,传入tuple作为params
results = db.query("SELECT * FROM table WHERE col1 = %s AND col2 = %s AND col3 > %s",
*query_params)
# 或者更常见的写法,直接传入tuple
results = db.query("SELECT * FROM table WHERE col1 = %s AND col2 = %s AND col3 > %s",
query_params[0], query_params[1], query_params[2])
关键点:
- SQL语句中使用
%s作为占位符(注意不是?或其他符号) - tuple中的元素数量必须与SQL中
%s的数量完全匹配 - 可以直接解包tuple(使用
*操作符)作为多个参数传入
如果你的tuple是单元素的,需要特别注意:
single_param = ('value',) # 注意末尾的逗号,确保是tuple而不是字符串
results = db.query("SELECT * FROM table WHERE col = %s", single_param[0])
这样能防止SQL注入,同时保持代码清晰。
总结:直接解包tuple传入params即可。
出发点为: 在不可知数 多查询条件下,怎么用 torndo 进行查询
自己研究了一下,用**kwargs 方式解决了,
原题答案如下:
def bar(*args):
print(type(args))
print(args)
t = (‘1’,‘2’,‘3’)
bar(*t)
参考:
https://stackoverflow.com/questions/5710391/converting-python-dict-to-kwargs

