如何使用例如Python将MS Access表导出到csv文件中pypyodbc

时间:2016-03-20 10:17:12

标签: python odbc 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中所有功能的文档,到目前为止我都找不到它?

1 个答案:

答案 0 :(得分: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控制台。或者对于您的csv导出,您可以与GUI应用程序交互并运行Access'TransferText()方法将表/查询导出到文本分隔文件。并且Python可以打开数据库并使用win32com module:

调用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