程序问答   发布时间:2022-06-02  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了使用 to_sql 将 Pandas 数据帧导出到访问表中生成错误大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

如何解决使用 to_sql 将 Pandas 数据帧导出到访问表中生成错误?

开发过程中遇到使用 to_sql 将 Pandas 数据帧导出到访问表中生成错误的问题如何解决?下面主要结合日常开发的经验,给出你关于使用 to_sql 将 Pandas 数据帧导出到访问表中生成错误的解决方法建议,希望对你解决使用 to_sql 将 Pandas 数据帧导出到访问表中生成错误有所启发或帮助;

我正在尝试使用 sqlalchemy-access 库将数据框插入到 Access 数据库中:

我拥有的代码是:

import msaccessdb
import pyodbc
import pandas as pd

print(pyodbc.version)
db_file = r'database\sampledatabase.accdb'
input_csv_file= r'database\sample_data.csv'
print(input_csv_filE)
msaccessdb.create(db_filE)
cnxn_str = (
    r'DRIVER={{Microsoft Access Driver (*.mdb,*.accdb)}};'
    r'DBQ={};'
    r'ExtendedAnsisql=1;'.format(db_filE)
)
print(cnxn_str)
cnxn = pyodbc.connect(cnxn_str,autocommit=TruE)
input_data=pd.read_csv(input_csv_filE)
input_data.to_sql('sample_table',cnxn,index=false,if_exists='replace')
cnxn.close()

但是当我运行此代码时,出现此错误:

Execution Failed on sql 'SELECT name FROM sqlite_master WHERE type='table' AND name=?;': ('42s02',"[42s02] [Microsoft][ODBC Microsoft Access Driver] The Microsoft Access database ENGIne cAnnot find the input table or query 'sqlite_master'. Make sure it exists and that its name is spelled correctly. (-1305) (sqlExecDirectW)")

当我尝试运行此行时生成错误:

input_data.to_sql('sample_table',if_exists='replace')

这段代码有什么问题,我该如何修复?

编辑 1

根据评论和这个post,我将代码更改为:

import msaccessdb
import pandas as pd
from sqlalchemy import create_ENGIne
import urllib

db_file = r'database\sampledatabase.accdb'
input_csv_file= r'database\sample_data.csv'

msaccessdb.create(db_filE)
cnxn_str = (
    r'DRIVER={{Microsoft Access Driver (*.mdb,*.accdb)}};'
    r'DBQ={};'
    r'ExtendedAnsisql=1;'.format(db_filE)
)
params = urllib.parse.quote_plus(cnxn_str)
ENGIne = create_ENGIne("mssql+pyodbc:///?odbc_connect=%s" % params)

print(cnxn_str)
create_ENGIne("access+pyodbc://@your_dsn")
input_data=pd.read_csv(input_csv_filE)
input_data.to_sql('sample_table',ENGIne,if_exists='replace')

但我仍然收到错误:

(pyodbc.ProgrAMMingError) ('42000',"[42000] [Microsoft][ODBC Microsoft Access Driver] Undefined function 'Schema_name' in Expression. (-3102) (sqlExecDirectW)")
[sql: SELECT Schema_name()]
(BACkground on this error at: http://sqlalche.me/e/14/f405)

编辑 2

复制此处所述:https://github.com/gordthompson/sqlalchemy-access/wiki/GetTing-Connected#connecTing-with-an-odbc-connection-String

所以代码现在看起来像这样

import msaccessdb
import pandas as pd
from sqlalchemy import create_ENGIne
import urllib

db_file = r'database\sampledatabase.accdb'
input_csv_file= r'database\sample_data.csv'

msaccessdb.create(db_filE)
connection_String = (
    r'DRIVER={{Microsoft Access Driver (*.mdb,*.accdb)}};'
    r'DBQ=database\sample_data.csv;'
    r'ExtendedAnsisql=1;'
)
connection_uri = f"access+pyodbc:///?odbc_connect={urllib.parse.quote_plus(connection_String)}"
ENGIne = create_ENGIne(connection_uri)

input_data=pd.read_csv(input_csv_filE)
input_data.to_sql('sample_table',if_exists='replace')

但我仍然收到此错误:

(pyodbc.Error) ('IM012','[IM012] [Microsoft][ODBC Driver Manager] DRIVER keyword Syntax error (0) (sqlDriverConnect)')
(BACkground on this error at: http://sqlalche.me/e/14/dbAPI)

请注意,我已经在我的系统上安装了 Access。

解决方法

驱动程序名称周围有两组大括号......

connection_String = (
    r'DRIVER={{Microsoft Access Driver (*.mdb,*.accdb)}};'
    r'DBQ=database\sampledatabase.accdb;'
    r'ExtendedAnsiSQL=1;'
)
connection_uri = f"access+pyodbc:///?odbc_connect={urllib.parse.quote_plus(connection_String)}"
ENGIne = create_ENGIne(connection_uri)

...但是因您使用的是 r'String'(而不是 f'String'),所以您应该只有一对大括号:

connection_String = (
    r'DRIVER={Microsoft Access Driver (*.mdb,*.accdb)};'
    r'DBQ=database\sampledatabase.accdb;'
    r'ExtendedAnsiSQL=1;'
)
connection_uri = f"access+pyodbc:///?odbc_connect={urllib.parse.quote_plus(connection_String)}"
ENGIne = create_ENGIne(connection_uri)

大佬总结

以上是大佬教程为你收集整理的使用 to_sql 将 Pandas 数据帧导出到访问表中生成错误全部内容,希望文章能够帮你解决使用 to_sql 将 Pandas 数据帧导出到访问表中生成错误所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。