我有一个应用程序需要与另一个应用程序的数据库进行交互。我有读取权限,但没有写入权限。
目前我正在通过 pyodbc 使用 sql 语句来获取行并使用 python 操作数据。由于我不缓存任何内容,因此成本可能相当高。
我正在考虑使用 ORM 来解决我的问题。问题是,如果我使用像“sql alchemy”这样的 ORM,它是否足够智能来获取其他数据库中的更改?
例如sql alchemy 访问表并检索行。如果该行在 sql alchemy 之外被修改,它是否足够聪明来拾取它?
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
编辑:为了更清楚
我有一个应用程序,它只是一个报告工具,让我们调用应用程序 A。
我有另一个处理各种金融交易的应用程序,称为应用程序 B。
A 可以访问 B 的数据库来检索交易并生成各种报告。有数十万笔交易。目前,我们正在 python 中手动缓存此信息,如果我们需要更新的报告,我们会刷新缓存。如果我们摆脱缓存,与计算相结合的 SQL 查询将变得不可扩展。
最佳答案
我认为 ORM 不能解决您的性能问题。默认情况下,ORM 往往比行 SQL 效率低,因为它们可能会获取您不会使用的数据(例如,当您只需要一个字段时执行 SELECT * ),尽管 SQLAlchemy 允许-对生成的 SQL 进行粒度控制。
现在要实现缓存机制,根据您的应用程序,您可以使用内存中的简单字典或专门的系统,例如 memcached 或 Redis。
为了保持缓存的数据相对新鲜,您可以定期轮询源,如果您的应用程序可以容忍一点延迟,这可能没问题。否则,您将需要对数据库具有写访问权限的应用程序,以便在发生更新时通知您的应用程序或缓存系统。
编辑:由于您似乎可以控制应用程序 B,并且您已经在应用程序 A 中拥有缓存系统,因此解决问题的最简单方法可能是在应用程序 A 中创建应用程序 B 可以调用的回调过期的缓存项目。两个应用程序都需要就识别缓存项目的约定达成一致。
关于python - 如何使用 python 有效地与另一个数据库交互,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7426564/