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

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() 函数将这些值放入列表中,然后将这些列表值放入另一个选择查询中,这就是它给出的地方我的错误

以上是关于选择包含混合单引号和双引号的元组的查询的主要内容,如果未能解决你的问题,请参考以下文章

使用单引号和双引号混合创建粘合字符串

SQL查询语句中单引号和双引号的问题

SQL查询语句中单引号和双引号的问题

Gradle 单引号和双引号

SQL语言中的单引号与双引号区别

php单引号中可以包含双引号吗