如何使用例如将 MS Access table 导出到 Python 中的 csv 文件pypyodbc
How to export MS Access table into a csv file in Python using e.g. pypyodbc
我一直在尝试使用 pypydobc 将 table 从 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() 方法将 tables/queries 导出到文本分隔文件。并且 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
我一直在尝试使用 pypydobc 将 table 从 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() 方法将 tables/queries 导出到文本分隔文件。并且 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