首页 > 解决方案 > 用引号将每个元素括在字符串元组中

问题描述

我需要查询数据库并在where link in (....). 问题是(...)因为“元组”是动态的。如果我这样做:

input_links = get_links() # [<link1>,...]
query = f"SELECT * from myTable where link in {tuple(input_links)}

除非input_links包含一个链接,否则工作正常,那么最后一部分会(link1,)破坏查询。

我试过使用

input_links = get_links() # [<link1>,...]
link_tpl = f'({",".join(input_links)})'
query = f"SELECT * from myTable where link in {link_tpl}

但这将元组中的整个参数包含在一个引号中,例如('link1,link2,link3')而不是('link1','link2','link3').

我知道我可以做一个

if len(input_links)==1:
   query = f"SELECT * from myTable where link={input_links[0]}"
else:
   f"SELECT * from myTable where link in {tuple(input_links)}

但它只是困扰我,我不能把它作为一个声明。

标签: python

解决方案


您可以将每个项目映射input_links到字符串格式化程序:

query = f'''SELECT * from myTable where link=({', '.join(map("'{}'".format, input_links))})'''

推荐阅读