Как обновить таблицу MS Access, которая содержит столбцы с автонумерацией из pandas df? - PullRequest
2 голосов
/ 29 апреля 2019

Мне нужно заполнить таблицу в MS Access, используя pandas df. Эта таблица содержит столбец с автонумерацией и другой столбец со значением по умолчанию = now ().

Я попытался передать следующий фрейм данных, оставив пустыми столбцы ID и RowInsertedTime, однако это не сработало.

d = {'ID': ['',''], 'col1': [1, 2], 'col2': [3, 4], 'RowInsertedTime': ['','']}
df = pd.DataFrame(data=d)

Я выполнил свой код, используя библиотеку pyodbc, как показано ниже:

connection_string = (
    r'DRIVER={Microsoft Access Driver (*.mdb, *.accdb)};'
    r'DBQ=C:\Users\Public\MyTest.accdb;'
)
cnxn = pyodbc.connect(connection_string, autocommit=True)
crsr = cnxn.cursor()

# insert the rows from the DataFrame into the Access table    
crsr.executemany(
    f"INSERT INTO [{table_name}] (ID, col1, col2, RowInsertedTime) VALUES (?, ?, ?, ?)",
    df.itertuples(index=False))

К сожалению, это возвращает следующую ошибку:

DataError: ('22018', '[22018] [Microsoft][ODBC Microsoft Access Driver] Data type mismatch in criteria expression. (-3030) (SQLExecDirectW)')

Есть идеи, как получить автоматические значения для пустых полей, отображаемых в моей таблице MS Access?

1 Ответ

1 голос
/ 29 апреля 2019

Вы должны пропустить столбцы, которые вы не обновляете.

crsr.executemany(
    f"INSERT INTO [{table_name}] (col1, col2) VALUES (?, ?)",
    df.itertuples(index=False))

Доступ заполнит пробелы.

...