誰かがデータベースに挿入するように見えるべきであるが、Pythonのすべてのデータフレームのように見えるべきか教えてもらえますか?
私はこれを見つけましたが、2つの数字(ID、Employee_id)を持つtest_dataと呼ばれるすべてのデータフレームを挿入する方法がわかりません。
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()
更新、2020年6月:
sqlalchemy-access方言が復活したので、最善の解決策はパンダのto_sql
方法を使用することです。
https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.to_sql.html
pyodbcのexecutemany
メソッドを使用して、pandasのメソッドを使用して行を渡すことができますitertuples
。
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))
更新:このようなパラメーター化されたクエリは、pyodbcバージョン4.0.27で再び機能しますが、4.0.25(上記のとおり)または4.0.26では機能しません。これらのバージョンを使用しようとすると、「オプション機能は実装されていません」というエラーが発生します。この問題については、https://github.com/mkleehammer/pyodbc/issues/509で説明しています。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加