试图执行此操作时:
mindate = min(df['review_ds'])
maxdate = max(df['review_ds'])
Unique_queue_id= df['queue id'].unique().astype(str).tolist()
cnxn.execute(r"""DELETE FROM [DATAWRHS-FACEBOOK].[dbo].[QA_PDO_AGE_AFFINITY_NEW] WHERE [review_ds] >= '""" + str(mindate) + """'
AND [review_ds] <= '""" + str(maxdate) + """'
AND [queue id] IN Unique_queue_id
""")
cnxn.commit()
我得到这个错误
我想在SQL查询中更新一些数据,该数据具有相同的日期,并排队了新接收数据的ID。因此,我想使用(最小日期和最大日期,仅选择我在新数据中的队列ID)中找到数据,然后删除并将新数据附加到查询中。PROGRAGIMMMINGERROR:('42000',“ [42000] [Microsoft] [SQL Server本地客户端11.0] [SQL Server] [SQL Server]不正确的语法附近'simolor_queue_id'。(102)(SQLEXECECDIRTECTW)
come,请帮助我知道我有脑袋,最大和列表queue_ids.
不使用值的字符串串联来构建SQL查询。使用绑定变量 您没有说您使用的是什么SQL驱动程序,而是想做一些使用
?
execute
(检查文档的文档相关语法的SQL驱动程序):
mindate = min(df['review_ds'])
maxdate = max(df['review_ds'])
Unique_queue_id= df['queue id'].unique().astype(str).tolist()
cnxn.execute(
f"""DELETE FROM [DATAWRHS-FACEBOOK].[dbo].[QA_PDO_AGE_AFFINITY_NEW]
WHERE [review_ds] >= ?
AND [review_ds] <= ?
AND [queue id] IN ({','.join('?' for _ in Unique_queue_id)})""",
[
mindate,
maxdate,
*Unique_queue_id,
],
)
注:您的SQL驱动程序可能具有将值列表绑定到
IN
子句的更好方法 - 检查驱动程序的文档。