我正在使用 python-Django 原始查询运行 SQL 查询..!!
我正在使用 IN() 函数在查询中传递我的元组。
我的代码看起来像这样......
在这里,我从 json/function 中获取 dnc_domains
和 dnc_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_names
或 dnc_domain_name
为empty [] 时,我的查询会抛出一个错误,否则至少有其中任何一个元素中有 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/