残念ながら、MS Access(具体pandas.to_sql()
的にはGUI.exeプログラムではなくディスクレベルのJet / ACEエンジン)はSQLAlchemyでサポートされていないため、理想的にはデータベースの一時テーブルにデータフレームをプッシュしてUPDATE final INNER JOIN temp ...
クエリを実行し、更新することができます。最終テーブル。行間で繰り返すよりもはるかに高速なルートです。
幸い、MSAccessのJet / ACE Engineは、ファイルのパスを指定してからcsvファイルの名前を指定するテーブルであるかのようにcsvファイルをクエリできます。したがって、データフレームを_csvにエクスポートし、Make-Tableクエリを使用して一時テーブルを作成し、最後に更新結合クエリを実行することを検討してください。以下try/except
は、存在する場合にテーブルを削除するために使用されます(IF EXISTS
コマンドはMS Access SQLでは使用できないため)。
df.to_csv('C:\Path\To\CSV\Output.csv', index=False)
try:
cursor.execute("SELECT * INTO tblhis_ventas_Temp" +\
" FROM [text;HDR=Yes;FMT=Delimited(,);Database=C:\Path\To\CSV].Output.csv")
conn.commit()
cursor.execute("UPDATE tblhis_ventas f INNER JOIN tblhis_ventas_Temp t" + \
" ON f.contrato = t.contrato AND f.estado = t.estado" + \
" SET f. portabilidad = t.portabilidad")
conn.commit()
except Exception as e:
if 'already exists' in str(e):
cursor.execute("DROP TABLE tblhis_ventas_Temp")
conn.commit()
else:
print(e)
cursor.close()
conn.close()
いいえ、UPDATE
csvは読み取り専用で更新可能なレコードセットではないため、クエリでCSVファイルを直接使用することはできません(一時テーブルプロセスをバイパスします)。興味深いことに、CSVはで使用できますINSERT...SELECT
。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加