如何将带有单引号和双引号的列表值放在Postgressql Select查询中

时间:2019-04-18 05:17:05

标签: python-3.x postgresql

我正在对selectgresql数据库执行选择查询,并在获取了这些结果之后,将这些结果附加到列表中,然后将该列表作为输入提供给另一个postgresql select查询。

但是由于将这些值转换为列表,因此会将带有撇号(特殊字符)cat's的值转换为双引号"cat's"。在执行第二个选择查询时,未获取带有双引号的值,因为数据库中不存在带双引号的值,而没有双引号cat's
那里给我的错误是值不存在。

我尝试了JSON转储方法,但由于我无法将JSON列表转换为元组并将其作为postgresql select查询的输入而无法使用

select_query = """select "Unique_Shelf_Names" from "unique_shelf" where category = 'Accessory'"""
cur.execute(select_query)
count = cur.fetchall()

query_list = []
for co in count:
    for c in co:
        query_list.append(c)

query_list的输出:

query_list = ['parrot', 'dog', "leopard's", 'cat', "zebra's"]

现在,此querylist已被转换为元组,并作为另一个选择查询的输入。

list2 = tuple(query_list)

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

cur.execute(query)

这是给我错误"leopard's" doesn't exist的地方,但是存在数据库豹。

我希望query_list中的所有值都用双引号引起来,所以不会出现此错误。

1 个答案:

答案 0 :(得分:2)

请勿使用format来构造查询。只需使用%s并将元组传递到execute

query = """select category from  "unique_shelf" where "Unique_Shelf_Names" in %s """

cur.execute(query,(list2,))

Tuples adaptation