Рассматривайте чистый SQL как механизм JET / ACE, позволяющий напрямую запрашивать внешние книги и базы данных. Вы можете сделать это либо из соединения с MS Access, либо из соединения с Excel, так как используется тот же базовый механизм. Нет необходимости в построчном добавлении курсора.
Ниже предполагается, что ВСЕ столбцы рабочего листа Excel совпадают один к одному с ВСЕМИ столбцами таблицы Access в том же порядке. Если вы используете поле автонумерации в таблице Access, рассмотрите возможность явного указания столбцов в пунктах INSERT INTO
и SELECT
запроса на добавление.
Подключение доступа (добавление таблицы локальной БД)
DBFile = r'C:\Users\nyeung\Documents\wsp.codingworkshop.python\ClassNotebooks\ETABS.accdb'
exFile = r'C:\Users\nyeung\Documents\wsp.codingworkshop.python\ClassNotebooks\ETABS.xlsx'
conn = pyodbc.connect('DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};DBQ='+DBFile)
# APPEND TO LOCAL TABLE
sql = """INSERT INTO ETABS
SELECT * FROM [Excel 12.0 Xml; HDR = Yes;Database={myfile}].[Sheet1$];
"""
curs = conn1.cursor()
curs.execute(sql.format(myfile = exFile))
conn.commit()
Кстати, вы даже можете выполнить запрос таблицы составления вместо добавления к существующей таблице:
SELECT * INTO myNewTable FROM [Excel 12.0 Xml; HDR=Yes; Database={myfile}].[Sheet1$]
Подключение к Excel (добавление к внешней таблице БД)
DBFile = r'C:\Users\nyeung\Documents\wsp.codingworkshop.python\ClassNotebooks\ETABS.accdb'
exFile = r'C:\Users\nyeung\Documents\wsp.codingworkshop.python\ClassNotebooks\ETABS.xlsx'
conn = pyodbc.connect('DRIVER={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DBQ='+exFile)
curs1 = conn1.cursor()
# APPEND TO EXTERNAL TABLE
sql = """INSERT INTO [{myfile}].[ETABS]
SELECT * FROM [Sheet1$];
"""
curs = conn.cursor()
curs.execute(sql.format(myfile = DBFile))
conn.commit()