我正在尝试使工作流程自动化,以便用户可以简单地运行python脚本,而无需进入ms访问权限来单独运行每个查询和导出表。
该查询是一个保存的更新查询,需要在导出任何表之前运行。
我的导出工作正常,但是我不知道如何使查询正常运行。
我找到了一个答案,
如果查询是其他类型的查询(例如
SELECT
参数INSERT
,UPDATE
,...),然后再访问AccessODBC
驱动程序 将它们作为存储过程公开,因此您需要使用ODBC {CALL...}
语法,如
import pyodbc
connStr = (
r"Driver={Microsoft Access Driver (*.mdb, *.accdb)};"
r"DBQ=C:\Users\Public\Database1.accdb;"
)
cnxn = pyodbc.connect(connStr)
sql = """\
{CALL mySavedUpdateQueryInAccess}
"""
crsr = cnxn.execute(sql)
cnxn.commit()
crsr.close()
cnxn.close()
但我不断收到错误消息:
回溯(最近通话最近):文件 “ C:\ Users \ servi \ OneDrive \ Documents \ Haley \ Licence_Management_Test \ Mercator_Licence_Management.py”, 第23行,在 qry = con.execute(SQL_qry)pyodbc.ProgrammingError:('42000','[42000] [Microsoft] [ODBC Microsoft Access驱动程序]语法错误 UPDATE语句。 (-3503)(SQLExecDirectW)')
import csv
import pyodbc
# constants
MDB = ("Z:\\pathway;")
DRV='{Microsoft Access Driver (*.mdb, *.accdb)};'
PWD="password"
# connect to db
con = pyodbc.connect('DRIVER={};DBQ={};PWD={}'.format(DRV,MDB,PWD))
cur = con.cursor()
filepath = ("C:\\pathway")
#run query
SQL_qry = "UPDATE * CALL qry_Master_Licence_List;"
qry = con.execute(SQL_qry) # executes command
print ("Querying results")
#get table info
SQL_tbl = 'SELECT * FROM tbl_Master_Licence_List;'
rows = cur.execute(SQL_tbl).fetchall()
cur.close()
con.close()
#export table as .csv
with open(filepath + 'Master_Licence_List.csv', 'w', newline='') as
fou:
csv_writer = csv.writer(fou)