首页 > 解决方案 > 由数据框形成的逗号分隔列表在传递到 SQL 时中断

问题描述

当我的数据框中没有任何值时,我的查询会中断。

我有数据框data1['invoice_number'],我将另一个 sql 作为逗号分隔列表传递。

下面的代码在我们有值时完美运行,但在我没有任何值时会中断。

sql1 = '''selectcarrier_account, invoice_number, invoice_amount, currency, invoice_date
from invoice_summary where invoice_number in ({})'''.format(','.join(["'{}'".format(x) for x in data1['invoice_number']]))


inv_summary= pd.read_sql_query(sql1,cnx)

错误

psycopg2.errors.SyntaxError) syntax error at or near ")"
LINE 2: from invoice_summary where invoice_number in ()

有没有办法我仍然可以在不中断的情况下执行此查询。

标签: pythonpandasdataframe

解决方案


MySQL 不允许在IN (). 如果您不想在列表为空时跳过查询,您可以做的是在 SQL 列表中添加一个永远不会匹配的额外元素。

sql1 = '''selectcarrier_account, invoice_number, invoice_amount, currency, invoice_date
from invoice_summary where invoice_number in ('', {})'''.format(','.join(["'{}'".format(x) for x in data1['invoice_number']]))

推荐阅读