INSERT INTO Доступ к базе данных из панд DataFrame - PullRequest
0 голосов
/ 03 февраля 2019

Может, кто-нибудь подскажет, как должна выглядеть вставка в базу данных, но для всего фрейма данных в python?

Я нашел это, но не знаю, как вставить весь фрейм данных с именем test_data с двумя цифрами: ID, Employee_id.

Я также не знаю, как вставить следующее значение для идентификатора (что-то вроде nextval)

Спасибо

import pyodbc 
conn = pyodbc.connect(r'Driver={Microsoft Access Driver (*.mdb)};DBQ=C:\Users\test_database.mdb;')
cursor = conn.cursor()  
cursor.execute('''
                INSERT INTO employee_table (ID, employee_id)
                VALUES(?????????)
              ''')
conn.commit()

Ответы [ 2 ]

0 голосов
/ 04 февраля 2019

Вы можете использовать метод executemany pyodbc, передавая строки с помощью метода itertuples pandas:

print(pyodbc.version)  ## 4.0.24 (not 4.0.25, which has a known issue with Access ODBC)
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()

# prepare test environment
table_name = "employee_table"
if list(crsr.tables(table_name)):
    crsr.execute(f"DROP TABLE [{table_name}]")
crsr.execute(f"CREATE TABLE [{table_name}] (ID COUNTER PRIMARY KEY, employee_id TEXT(25))")

# test data
df = pd.DataFrame([[1, 'employee1'], [2, 'employee2']], columns=['ID', 'employee_id'])

# insert the rows from the DataFrame into the Access table    
crsr.executemany(
    f"INSERT INTO [{table_name}] (ID, employee_id) VALUES (?, ?)",
    df.itertuples(index=False))
0 голосов
/ 03 февраля 2019

Используя to_sql, вы можете сделать:

test_data.to_sql('employee_table', conn, if_exists='append')

Это добавит значения test_data в конец таблицы вашего сотрудника.

...