传递空列表时SQL查询(select)中出现语法错误

2024-10-06 14:25:46 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在使用pythondjango原始查询运行SQL查询。。!!在

我使用IN()函数在查询中传递元组。在

我的代码看起来像这样。。。在

这里我从一个json/函数得到dnc_domains和{}的列表

dnc_domain_names = list(map(lambda x: get_domain_name(x), dnc_websites))
dnc_company_names = list(map(lambda l: l.lower(), list(filter(None, list(map(lambda x: x['company_name'], dnc_info))))))

查询:

^{pr2}$

正在执行查询:

with connection.cursor() as cursor:
     cursor.execute(select_query, (campaign.id,tuple(dnc_company_names),tuple(dnc_domain_names))
     matching_contact_ids = cursor.fetchall()

但是,如果任何dnc_company_names或{}是empty[]那么我的查询就会抛出一个错误,否则如果其中任何一个元素中至少有一个元素,那么它就可以正常工作了。在

SQL错误:

syntax error at or near ")"
LINE 5:                                 WHERE id IN ()
                                                     ^

所以,帮我解决这个错误。SQL应该同时处理空元组或非空元组。在


Tags: lambda函数nameinidmapsqlnames
2条回答

IN的右侧必须是只返回一列的子查询: https://www.postgresql.org/docs/current/static/functions-subquery.html#FUNCTIONS-SUBQUERY-IN

我试过了

SELECT *
FROM table_with_data 
WHERE toto IN (SELECT * FROM empty);

会引发以下错误:

ERROR: subquery has too few columns

我想您应该在(NULL)中提供一些东西,以防列严格不为NULL。在

这可以通过在列表中提供NULL值来解决

if not dnc_company_name:
    dnc_company_name = [None]

最后,在我的问题中,我将dnc_company_name转换成{}。在

它解决了我的问题。在

相关问题 更多 >