Python 从DataFrame插入Access数据库
请有人告诉我,在python中,插入到数据库中的所有数据帧应该是什么样子 我发现了这个,但不知道如何插入所有名为test_data的数据框,其中包含两个数字:ID,Employee_ID 我也不知道如何为ID插入下一个值(比如nextval) 多谢各位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 =
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非常棒。我唯一的问题是插入空值(行中只有一些值为空,但它们必须保持为空)。有没有办法将参数添加到此插入中?非常感谢。既然方言已经复兴,这应该是首选的解决方案。