ai didi

python - 如何从pandas dataframe更新ms access中的多行

转载 作者:太空宇宙 更新时间:2023-11-03 15:38:48 24 4
gpt4 key购买 nike

我正在尝试从 pandas 数据框中的列执行此更新查询:

sql = "UPDATE tblhis_ventas SET portabilidad = '%s' WHERE (contrato = '%s' and estado = '%s') " % (
df['portabilidad'], df['contrato'], df['estado']
)

cursor.execute(sql)

查询未执行且不显示错误。

我的数据框如下所示:

Data Table Screeshot

最佳答案

不幸的是,SQLAlchemy 不支持 MS Access(特别是其磁盘级 Jet/ACE 引擎,而不是 GUI .exe 程序)以允许 pandas.to_sql()理想情况下,您可以将数据帧推送到数据库中的临时表,以运行 UPDATE Final INNER JOIN temp ... 查询来更新最终表,这是比跨行迭代更快的路线。

幸运的是,MS Access 的 Jet/ACE 引擎可以查询 csv 文件,就像您在其中指定文件路径和 csv 文件名称的表格一样。因此,考虑导出数据框 to_csv ,然后使用 Make-Table 创建临时表查询,最后运行更新连接查询。下面的try/except用于删除表(如果存在)(因为IF EXISTS命令在MS Access SQL中不可用)。

df.to_csv('C:\Path\To\CSV\Output.csv', index=False)

try:
cursor.execute("SELECT * INTO tblhis_ventas_Temp" +\
" FROM [text;HDR=Yes;FMT=Delimited(,);Database=C:\Path\To\CSV].Output.csv")
conn.commit()

cursor.execute("UPDATE tblhis_ventas f INNER JOIN tblhis_ventas_Temp t" + \
" ON f.contrato = t.contrato AND f.estado = t.estado" + \
" SET f. portabilidad = t.portabilidad")
conn.commit()

except Exception as e:
if 'already exists' in str(e):
cursor.execute("DROP TABLE tblhis_ventas_Temp")
conn.commit()
else:
print(e)

cursor.close()
conn.close()

不,我们不能在UPDATE查询中直接使用CSV文件(绕过临时表过程),因为CSV是只读且不可更新的记录集。有趣的是,您可以在 INSERT...SELECT 中使用 CSV。

关于python - 如何从pandas dataframe更新ms access中的多行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42323232/

24 4 0
文章推荐: Paypal REST API 自适应/多次付款(更改收款人)
文章推荐: python - pip 和 easy_install > 尝试安装tensorflow后出错
文章推荐: web-services - 使用纯 JAX-WS 添加 SOAP header 对象
文章推荐: c# - 使用 SqlTransaction 提交多个 SqlCommand
太空宇宙
个人简介

我是一名优秀的程序员,十分优秀!

滴滴打车优惠券免费领取
滴滴打车优惠券
全站热门文章
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com