python - 传递空列表时 SQL 查询 ( select ) 中的语法错误

标签 python sql django postgresql

我正在使用 python-Django 原始查询运行 SQL 查询..!!

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

我的代码看起来像这样......

在这里,我从 json/function 中获取 dnc_domainsdnc_company 的列表

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))))))

查询:

select_query = """
                   select c.id
                   from (
                         select id, lower(company_name) as c_name,substring(website from '(?:.*://)?(?:www\.)?([^/]*)') as website_domain, 
                         from contacts 
                         where campaign_id = %s
                         ) c
                   where
                    c.c_name IN %s 
                    OR c.website_domain IN %s
                 """

执行查询:

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_namesdnc_domain_nameempty [] 时,我的查询会抛出一个错误,否则至少有其中任何一个元素中有 1 个元素就可以正常工作。

SQL 错误:

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

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

最佳答案

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

if not dnc_company_name:
    dnc_company_name = [None]

最后,在我的问题中,我正在将 dnc_company_name 转换为 tuple

它解决了我的问题。

关于python - 传递空列表时 SQL 查询 ( select ) 中的语法错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47884228/

相关文章:

python - 在 cx_oracle 中返回一个存储过程输出游标变量

Python OpenCV 立体摄像头盲一?

mysql - django,一个orm命令执行重复的sql语句

python - Celery 和 Django 的周期性任务

Python Django - 在 View 中访问响应 header

python - 在ansible中,我们如何将所有任务文件包含在一个目录中

python - 为什么我的 ttk.Treeview 单击处理程序在 tree.focus() 上返回错误的项目?

sql - SQL中的TRIM函数可以更精确吗?

SQL Order By 中的 Order By

sql - 按日期将文件从一个目录复制到另一个目录