Как запустить сохраненный запрос на обновление в доступе из скрипта Python? - PullRequest
1 голос
/ 18 апреля 2019

Я пытаюсь автоматизировать процесс на работе, чтобы пользователь мог просто запустить скрипт Python вместо того, чтобы войти в ms access для выполнения каждого запроса и экспорта таблиц индивидуально.

Запрос является сохраненным запросом обновления и должен быть запущен до экспорта любых таблиц.

У меня экспорт работает нормально, но я не могу понять, как заставить запрос работать правильно.

Я нашел ответ, который сказал:

Если запрос относится к другому типу запроса (например, SELECT с параметрами, INSERT, UPDATE, ...) затем драйвер Access ODBC представляет их как хранимые процедуры, поэтому вам нужно использовать синтаксис 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()

, но я получаю сообщение об ошибке:

Traceback (последний вызов был последним): файл "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 Driver] Синтаксическая ошибка в выражении 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...