私はからテーブルをエクスポートしようとしているMS AccessデータベースにCSVの使用- pypydobcを使用してファイルfetchone機能は例えば20万行を印刷し、約5分を取っている永遠に取っています。fetchoneの方が速ければ、結果をcsvファイルに出力することもできましたが、時間がかかりすぎます。これは私がこれまでに試したことです:
import pypyodbc
pypyodbc.lowercase = False
conn = pypyodbc.connect(
r"Driver={Microsoft Access Driver (*.mdb, *.accdb)};" +
r"Dbq=C:\temp\Temp_DB.accdb;")
cur = conn.cursor()
cur.execute("SELECT Column1, Column2, FROM Table1");
Col1 = []
Col2 = []
row = cur.fetchone()
while row is not None:
print(row)
row = cur.fetchone()
Col1.append(row.get("Column1"))
Col2.append(row.get("Column2"))
cur.close()
conn.close()
また、これまで見つけられなかったpypyodbcのすべての関数に関するドキュメントはありますか?
cur.fetchall()
とcsv
モジュールを使用して、個々のリストに追加する必要なしにクエリ結果を直接出力することを検討してください(そして、print
処理時間を節約するために控えることを検討してください)。
import pypyodbc
import csv
# MS ACCESS DB CONNECTION
pypyodbc.lowercase = False
conn = pypyodbc.connect(
r"Driver={Microsoft Access Driver (*.mdb, *.accdb)};" +
r"Dbq=C:\temp\Temp_DB.accdb;")
# OPEN CURSOR AND EXECUTE SQL
cur = conn.cursor()
cur.execute("SELECT Column1, Column2, FROM Table1");
# OPEN CSV AND ITERATE THROUGH RESULTS
with open('Output.csv', 'w', newline='') as f:
writer = csv.writer(f)
for row in cur.fetchall() :
writer.writerow(row)
cur.close()
conn.close()
余談ですが、上記では、Jet / ACE SQLエンジン(MSAccess.exeのオブジェクトであり、プログラムに限定されず、すべてのOffice / Windowsプログラムで使用できます)に接続しています。MSAccessはデータベースであるが、実際にはGUIであると誤解されています。 1のコンソールが。また、あなたのCSVエクスポートのために、あなたはGUIアプリケーションと対話することができますし、Access'を実行するに、TransferText()輸出テーブルにメソッドを/テキストへのクエリは、ファイルを区切りとPythonには、データベースを開き、と輸出メソッドを呼び出すことができます。win32com
モジュール:
import win32com.client
# OPEN ACCESS APP AND DATABASE
oApp = win32com.client.Dispatch("Access.Application")
oApp.OpenCurrentDatabase('C:\temp\Temp_DB.accdb')
# EXPORT TABLE TO CSV
acExportDelim = 2
oApp.DoCmd.TransferText(acExportDelim, None, "Table1", 'Output.csv'), True)
oApp.DoCmd.CloseDatabase
oApp.Quit
oApp = None
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加