【发布时间】:2020-10-09 13:12:37
【问题描述】:
好的,我们的会计软件使用 VFP。是的,我知道它很旧。
他们正在更新到 Microsoft SQL 数据库……但我还没有。
我已经尝试了所有方法来使用 python 获取数据。这是我想出的最好的(下),但它的速度很慢。一个 DBF 文件将近 2gb,这是不行的。
任何人都知道更好的解决方案,理想情况下我可以使用 SQL 查询它,但没有 64 位 VFP 驱动程序。
帮帮我。
from dbfread import DBF
import datetime
import os
df = DBF("E:/Opera3VFP/Data/l_stran.dbf")
order_list = ["Reference, Date, Tr Type, Customer Reference, Value, Vat"]
for rec in df:
if rec["ST_ACCOUNT"] == "CDL2" and rec["ST_TRDATE"] >= datetime.date.today() - datetime.timedelta(days=5):
order_list.append(f'{rec["ST_TRREF"]}, {rec["ST_TRDATE"]}, {rec["ST_TRTYPE"]}, {rec["ST_CUSTREF"]}, {rec["ST_TRVALUE"]}, {rec["ST_VATVAL"]}')
【问题讨论】:
-
有32位VFPOLEDB驱动。
-
由于某种原因对我不起作用
-
什么不适合你?在您的代码中,您只需过滤给定帐户和过去 5 天。这不是您在代码中尝试以最糟糕的方式执行的操作吗?我不是 python 用户,因此不知道如何使用 python 的 OLEDB 驱动程序。如果你想要一个示例,比如 C# 或 Go,那么我可以给你。
-
问题是,我正在实施的当前方法是逐行读取文件,而且速度极慢。我可以使用 OLEDB 驱动程序等,但是当我尝试使用 32 位 VFP 驱动程序时,它会抱怨“指定的 DSN 包含驱动程序和应用程序之间的体系结构不匹配”。执行基本查询所需的时间太长。我在 VBA 中做了类似的事情,需要几秒钟,这种方法更像是 30 秒。
-
@CetinBasoz 话虽这么说,但出于兴趣,我会对如何用 C# 编写它的示例感兴趣。
标签: python sql odbc visual-foxpro