Python 从DataFrame插入Access数据库

Python 从DataFrame插入Access数据库,python,pandas,ms-access,insert,pyodbc,Python,Pandas,Ms Access,Insert,Pyodbc,请有人告诉我,在python中,插入到数据库中的所有数据帧应该是什么样子 我发现了这个,但不知道如何插入所有名为test_data的数据框,其中包含两个数字:ID,Employee_ID 我也不知道如何为ID插入下一个值(比如nextval) 多谢各位 import pyodbc conn = pyodbc.connect(r'Driver={Microsoft Access Driver (*.mdb)};DBQ=C:\Users\test_database.mdb;') cursor =

请有人告诉我,在python中,插入到数据库中的所有数据帧应该是什么样子

我发现了这个,但不知道如何插入所有名为test_data的数据框,其中包含两个数字:ID,Employee_ID

我也不知道如何为ID插入下一个值(比如nextval)

多谢各位

import pyodbc 
conn = pyodbc.connect(r'Driver={Microsoft Access Driver (*.mdb)};DBQ=C:\Users\test_database.mdb;')
cursor = conn.cursor()  
cursor.execute('''
                INSERT INTO employee_table (ID, employee_id)
                VALUES(?????????)
              ''')
conn.commit()

使用
访问sql
您可以执行以下操作:

test_data.to_sql('employee_table', engine, index=False, if_exists='append')
这将在员工表末尾添加测试数据值。

更新,2020年6月:

既然方言已经复兴,最好的解决办法就是使用pandas的
to_sql
方法


(先前的答复)

您可以使用pyodbc的
executemany
方法,使用pandas的
itertuples
方法传递行:

print(pyodbc.version)##4.0.24(不是4.0.25,它与Access ODBC存在已知问题)
连接字符串=(
r'DRIVER={Microsoft Access驱动程序(*.mdb,*.accdb)};'
r'DBQ=C:\Users\Public\MyTest.accdb;'
)
cnxn=pyodbc.connect(连接字符串,autocommit=True)
crsr=cnxn.cursor()
#准备测试环境
table_name=“employee_table”
if列表(crsr.表格(表格名称)):
crsr.execute(f“DROP TABLE[{TABLE_name}]”)
crsr.execute(f“创建表[{TABLE_name}](ID计数器主键,雇员ID文本(25)))
#测试数据
df=pd.DataFrame([[1,'employee1'],[2,'employee2']],列=['ID','employeeid'])
#将数据框中的行插入Access表
执行官(
f“插入[{table_name}](ID,雇员ID)值(?,)”,
df.itertuples(索引=假))
更新:
类似这样的参数化查询同样适用于pyodbc版本4.0.27,但不适用于4.0.25(如上所述)或4.0.26。尝试使用这些版本将导致“未实现可选功能”错误。此处讨论此问题。

您可能需要使用。现在要做的是执行SQL,用光标手动添加值。不需要将带有
的光标指向\u sql
,只需要连接到数据库。您打算如何在不进行迭代的情况下插入整个数据帧?更好地搜索pandas dataframe的
to_sql
方法,这在这种情况下非常有用ExecuteMany非常棒。我唯一的问题是插入空值(行中只有一些值为空,但它们必须保持为空)。有没有办法将参数添加到此插入中?非常感谢。既然方言已经复兴,这应该是首选的解决方案。