选择包含带单引号和双引号混合的元组的查询

时间:2019-04-17 11:39:56

标签: python-3.x postgresql

PostgreSQL选择查询包含带单引号和双引号的元组,当将此元组作为选择查询的输入时,会产生错误,指出数据库中不存在特定值。

我很讨厌将值列表转换为带双引号的JSON列表,但这也无济于事。

list = ['mango', 'apple', "chikoo's", 'banana', "jackfruit's"]

query = """select category from  "unique_shelf" where  "Unique_Shelf_Names"  in {}""" .format(list)

错误:列“ chikoo's”不存在

确实存在chikoo 但由于使用双引号,因此无法获取该值。

1 个答案:

答案 0 :(得分:0)

首先,请不要使用 list 作为变量名,list是保留关键字,并且您不想覆盖它。

第二,在表和列周围使用“”是不好的做法,请改用`。

第三,格式化数组时,其输出为

select category from `unique_shelf` 
where `Unique_Shelf_Names` in (['mango', 'apple', "chikoo's", 'banana', "jackfruit's"])

这不是有效的SQL语法。

您可以用逗号将所有值连接起来

>>>print("""select category from `unique_shelf` where `Unique_Shelf_Names` in {})""".format(','.join(l)))
select category from `unique_shelf` 
where `Unique_Shelf_Names` in (mango,apple,chikoo's,banana,jackfruit's)

这里的问题是括号内的值未加引号。我们可以通过使用双引号(“)

预先格式化它们来实现
l = ['mango', 'apple', "chikoo's", 'banana', "jackfruit's"]
list_with_quotes = ['"{}"'.format(x) for x in l]

query = """
select category from `unique_shelf` 
where `Unique_Shelf_Names` in ({})""" .format(','.join(list_with_quotes))

这将为您输出

select category from `unique_shelf` 
where `Unique_Shelf_Names` in ("mango","apple","chikoo's","banana","jackfruit's")