2

pypydobcを使用してMS Access データベースからcsvファイルにテーブルをエクスポートしようとしています。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 のすべての関数に関するドキュメントはありますか?

4

1 に答える 1

3

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 プログラムで使用できます) に接続しています。これは、MS Access がデータベースであるが、実際には GUI であると考える誤称です。 console to one . Alternative for your csv export, you can interact with the GUI application and run Access' TransferText() method to export tables/queries to text delimited files. Python はデータベースを開いて、win32comモジュールで export メソッドを呼び出すことができます:

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
于 2016-03-20T14:49:22.997 に答える