簡體   English   中英

如何使用例如 pypyodbc 將 MS Access 表導出到 Python 中的 csv 文件

[英]How to export MS Access table into a csv file in Python using e.g. pypyodbc

我一直在嘗試使用 pypydobc 將MS Access 數據庫中的表導出到csv文件中 - 使用fetchone函數需要永遠,例如 200,000 行需要大約 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 程序- 認為 MS Access 是一個數據庫但實際上是一個 GUI 的誤稱控制台到一個。或者,對於您的 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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM