2 回答
TA贡献1848条经验 获得超10个赞
尝试使用join并将括号放在字符串中:
sql1 = '''select carrier_name, carrier_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']]))
更新
您可以使用该DataFrame.empty
属性有条件地设置 sql 语句的值。如果data1
为空,则将您的WHERE
子句设置为 False,例如1 = 0
:
if data1.empty:
sql1 = '''select carrier_name, carrier_account, invoice_number, invoice_amount, currency, invoice_date
from invoice_summary where 1 = 0'''
else:
sql1 = ('''select carrier_name, carrier_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']])))
TA贡献1936条经验 获得超6个赞
为了避免 SQL 注入,你可以使用这个:
invoice_nums_list = data1['invoice_number'].values.tolist()
sql1 = '''select carrier_name, carrier_account, invoice_number, invoice_amount, currency, invoice_date from invoice_summary where invoice_number in ''' +
'(' + ','.join('%s' for i in range(len(invoice_nums_list))) + ')'
print(sql1)
cursor.execute(sql1, params=tuple(invoice_nums_list))
添加回答
举报