选择包含混合单引号和双引号的元组的查询
Posted
技术标签:
【中文标题】选择包含混合单引号和双引号的元组的查询【英文标题】:Select Query containing tuple With mixed single as well as double quotes 【发布时间】:2019-04-17 11:39:56 【问题描述】: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】:首先请不要使用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")
【讨论】:
感谢您的回复,但list_with_quotes = ['"mango"','"apple"','"chikoo\'s"','"banana"','"jackfruit\'s"']
的输出它们不是双引号,它们是带单引号的双引号,所以当我将此输入提供给选择查询时,它会在数据库中搜索带双引号的值,例如“ chikoo's" 但现在的价值是 chikoo's。
我正在尝试通过select query
从数据库中获取这些水果值,然后使用fetchall()
函数将这些值放入列表中,然后将这些列表值放入另一个选择查询中,这就是它给出的地方我的错误以上是关于选择包含混合单引号和双引号的元组的查询的主要内容,如果未能解决你的问题,请参考以下文章