python和mysql:传递列表/元组

h7wcgrx3  于 2021-06-23  发布在  Mysql
关注(0)|答案(5)|浏览(521)

我正在用python构建一个查询来传递给pymysql查询。
condition=['m'] query = "select * from table where condition in {}'.format(tuple(condition)) 我一直坚持的一点是,我想设置一个脚本,使其既适用于 condition 可以是单个项目,也可以有多个项目。
在我看来,将列表转换为元组是可行的,但事实并非如此,因为: tuple(condition) 退货: ('m',) ,在我的mysql服务器上无法工作。
最简单的设置方法是什么?我可以将单个值或多个值发送到 where 在python中生成查询的子句?

wdebmtf2

wdebmtf21#

使用多个条件的最简单方法是为单个“where”设置一个格式字符串:

fmtstr = "select * from table where condition in {} "

再加上一些东西:

addstr = "or condition in {} "

并根据需要连接它们。
对于元组,可以像使用列表一样对其中的项进行寻址:

x = (1, 'a')
x[0] == 1  #evaluates True
x[1] == 'a'  #same
ttp71kqs

ttp71kqs2#

所以我选择了另一条路线,因为这些建议要么太麻烦,要么不起作用。
对我有效的解决方案是: cond = ', '.join('"{0}"'.format(w) for w in condition) 然后查询是: select * from table where condition in ({}) .格式(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")
mhd8tkvw

mhd8tkvw3#

您可能必须将其作为字符串传递,然后让您的sql server完成其余的工作。你试过:

query = "select * from table where condition in {}'.format(str(tuple(condition)))`
blmhpbnm

blmhpbnm4#

我能想到的另一个方法是替换查询的最后一部分。
问题通常发生在只有一个元素的情况下,也就是说,它会像这样在末尾加一个不必要的逗号 ('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')
e37o9pze

e37o9pze5#

我相信这会解决你的问题:

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 显然,函数的作用是将字符串用引号括起来。

相关问题