我正在用Python构建查询以传递给pymysql查询。
condition=['m']
query = "select * from table where condition in {}'.format(tuple(condition))
我要坚持的部分是我想设置脚本以在condition
可以是单个项目或具有多个项目的情况下工作。
在我看来,将列表转换为元组是可行的,但这样做不可行,因为:
tuple(condition)
返回:
('m',)
,无法在我的mysql服务器上工作。
最简单的设置方法是,我可以将单个值或多个值发送到python构建的查询上的where
子句中?
答案 0 :(得分:1)
使用多个条件的最简单方法是为单个“ where”使用格式字符串:
fmtstr = "select * from table where condition in {} "
以及要添加的内容:
addstr = "or condition in {} "
并根据需要连接它们。
对于元组,您可以像使用列表一样处理内部项目:
x = (1, 'a')
x[0] == 1 #evaluates True
x[1] == 'a' #same
答案 1 :(得分:1)
您可能必须将其作为字符串传递,并让您的sql server完成其余工作。 您是否尝试过:
query = "select * from table where condition in {}'.format(str(tuple(condition)))`
答案 2 :(得分:0)
我相信这可以解决您的问题:
condition=['m', 'n']
def quoteWrap(path):
return '"' + path + '"'
query = "select * from table where condition in ({})".format(','.join([quoteWrap(c) for c in condition]))
query
#select * from table where condition in ("m","n")
显然,我还添加了quoteWrap
函数,将您的字符串用引号引起来。
答案 3 :(得分:0)
我可以想到的另一种技巧是替换查询的最后一部分。
如果您只有一个元素,通常会出现此问题,即像这样('m',)
为什么不这样做:
condition = ['m']
queryString = 'SELECT o_id FROM orders WHERE o_k_id IN ' + str(tuple(condition))
queryString = queryString.replace(',)', ')')
print(queryString)
因此您的查询将如下所示:
select * from table where condition in ('m')
如果您必须将多个值传递到where条件,则仍然适用:
condition = ['m', 'n']
queryString = 'select * from table where condition in ' + str(tuple(condition))
queryString = queryString.replace(',)', ')')
print(queryString)
输出:
select * from table where condition in ('m', 'n')
答案 4 :(得分:0)
所以我走了一条不同的路,因为这些建议太麻烦了,或者没有用。
对我有用的解决方案是:
cond = ', '.join('"{0}"'.format(w) for w in condition)
,然后查询为:
select * from table where condition in ({})
。format(cond)`
这将生成一串用逗号分隔的值,每个值都用引号引起来。示例:
condition = ['baseline', 'error']
cond = ', '.join('"{0}"'.format(w) for w in condition)
#"baseline","error"
query = select * from table where condition in ({})`.format(cond)
# select * from table where condition in ("baseline","error")