首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Pyodbc连接到Access,使用Pandas to_sql创建表(method=‘multi“)抛出错误

Pyodbc连接到Access,使用Pandas to_sql创建表(method=‘multi“)抛出错误
EN

Stack Overflow用户
提问于 2022-02-03 19:32:26
回答 1查看 245关注 0票数 1

我已经安装了sql-炼金术访问,以便我能够使用熊猫和pyodbc查询我的Access DB。

问题是,它非常慢,因为它执行单行插入。另一篇文章建议我使用方法=‘multi’,虽然它似乎适用于问这个问题的人,但它为我抛出了一个CompileError。

CompileError:带有当前数据库版本设置的“access”方言不支持就地多行插入。

AttributeError:“CompileError”对象没有属性“orig”

代码语言:javascript
复制
import pandas as pd
import pyodbc
import urllib
from sqlalchemy import create_engine
connection_string = (
    r"DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};"
    rf"DBQ={accessDB};"
    r"ExtendedAnsiSQL=1;"
)

connection_uri = f"access+pyodbc:///?odbc_connect={urllib.parse.quote_plus(connection_string)}"
engine = create_engine(connection_uri)
conn = engine.connect()

# Read in tableau SuperStore data
dfSS = pd.read_excel(ssData)

dfSS.to_sql('SuperStore', conn, index=False, method='multi')
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-02-03 20:01:01

Access SQL不支持多行插入,因此to_sql也永远无法支持它们。另一篇文章可能在使用SQLite。

相反,您可以将数据帧写入CSV,并使用查询插入CSV。

或者,当然,根本不读取Python中的Excel,而只是按查询插入Excel文件。这总是要快得多,因为Access可以直接读取数据,而不是Python读取数据,然后传输数据。

例如。

代码语言:javascript
复制
INSERT INTO SuperStore 
SELECT * FROM [Sheet1$] IN "C:\Path\To\File.xlsx"'Excel 12.0 Macro;HDR=Yes'

您应该能够使用pyodbc执行此操作,而不需要涉及sqlalchemy。请注意双引号和单引号的组合,它们在其他编程语言中嵌入时可能会有些痛苦。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/70977237

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档