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 但由于使用双引号,因此无法获取该值。
答案 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")