[英]Use Python to insert data into a MS Access Database
我正在尝试使用 Python 将值插入到 Microsoft Access 数据库中。
我可以按如下方式插入值:
df = pd.read_excel(xlsx, sheets[0])
for i in range(1, len(sheets)):
data = []
data = pd.read_excel(xlsx, sheets[i])
df = df.append(data)
k = (df.iat[3,0])
conn = pyodbc.connect(r'Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ= \\.....\Stat_tracker.accdb;')
cursor = conn.cursor()
cursor.execute("INSERT INTO ABCD (Serial) VALUES ('xxxx')")
cursor.execute('select * from ABCD')
for row in cursor.fetchall():
print(row)
我想使用循环来遍历多条记录。 有没有更好的办法?
当我将cursor.execute
代码替换为
cursor.execute("INSERT INTO ABCD (Serial) VALUES (%s)",(k,))
它抛出以下错误:
pyodbc.ProgrammingError: ('42000', "[42000] [Microsoft][ODBC Microsoft Access Driver]
查询表达式“%s”中的语法错误。 (-3100) (SQLPrepare)")
显然,我在使用%s
遗漏了一些东西。 也许还有另一个占位符?
这应该是一个简单的修复,我对语法太不熟悉了。
帮助新手?
Python 的数据库 API 规范列出了几种进行参数化的方法:
qmark
: 问号样式,例如...WHERE name=?
numeric
: 数字,位置样式,例如...WHERE name=:1
named
: 命名样式,例如...WHERE name=:name
format
:ANSI C printf 格式代码,例如...WHERE name=%s
pyformat
: Python 扩展格式代码,例如...WHERE name=%(name)s
大多数实现只支持一个或两个。 看起来pyodbc
使用qmark
-style 参数,而不是format
-style。
试试这个:
cursor.execute("INSERT INTO ABCD (Serial) VALUES (?)", (k,))
考虑一个纯 SQL 查询,因为 MS Access Jet/ACE 引擎可以直接查询 Excel 工作簿。 具体来说,运行插入-选择UNION
查询,避免使用 Pandas、循环或参数。
下面假设每个 Excel 工作表中都存在Serial
列标题,并且是您打算循环的列。 相应调整。
sql = """INSERT INTO ABCD (Serial)
SELECT t1.Serial
FROM [Excel 12.0 Xml;HDR=Yes;Database=C:\Path\To\Excel\Workbook.xlsx].[Sheet1$] t1
UNION ALL
SELECT t2.Serial
FROM [Excel 12.0 Xml;HDR=Yes;Database=C:\Path\To\Excel\Workbook.xlsx].[Sheet2$] t2
UNION ALL
SELECT t3.Serial
FROM [Excel 12.0 Xml;HDR=Yes;Database=C:\Path\To\Excel\Workbook.xlsx].[Sheet3$] t3
...
"""
cur.execute(sql)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.