gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 12:28:14 27 4
gpt4 key购买 nike

我正在使用 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com