如何使用python有效地与另一个数据库接口

如何使用python有效地与另一个数据库接口,python,sql,orm,sqlalchemy,Python,Sql,Orm,Sqlalchemy,我有一个应用程序需要与另一个应用程序的数据库接口。我有读权限,但没有写权限 目前,我通过pyodbc使用sql语句获取行,并使用python操作数据。因为我不缓存任何东西,这可能会非常昂贵 我正在考虑使用ORM来解决我的问题。问题是,如果我使用像“sql alchemy”这样的ORM,它是否足够聪明,可以在其他数据库中拾取更改 例如,sql alchemy访问一个表并检索一行。如果那一行在sql炼金术之外被修改了,那么它是否足够聪明来选择它呢 ~~~~~~~~~~~~~~~~~~~~~~~~~~

我有一个应用程序需要与另一个应用程序的数据库接口。我有读权限,但没有写权限

目前,我通过pyodbc使用sql语句获取行,并使用python操作数据。因为我不缓存任何东西,这可能会非常昂贵

我正在考虑使用ORM来解决我的问题。问题是,如果我使用像“sql alchemy”这样的ORM,它是否足够聪明,可以在其他数据库中拾取更改

例如,sql alchemy访问一个表并检索一行。如果那一行在sql炼金术之外被修改了,那么它是否足够聪明来选择它呢

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

编辑:为了更清楚

我有一个应用程序,它只是一个报告工具,让我们称之为应用程序a

我有另一个处理各种金融交易的应用程序,叫做appb


A可以访问B的数据库以检索事务并生成各种报告。有成百上千的交易。我们目前正在python中手动缓存此信息,如果需要更新的报告,我们将刷新缓存。如果我们去掉缓存,结合计算的sql查询将无法扩展。

我认为ORM不是解决性能问题的方法。默认情况下,ORM的效率往往低于行SQL,因为它们可能获取您不打算使用的数据(例如,当您只需要一个字段时,执行
SELECT*
),尽管SQLAlchemy允许对生成的SQL进行细粒度控制

现在,根据您的应用程序,要实现缓存机制,您可以使用内存中的简单字典或专用系统,如memcached或Redis

为了使缓存的数据保持相对新鲜,可以定期轮询源,如果应用程序能够容忍一点延迟,这也可以。否则,当发生更新时,您将需要对数据库具有写访问权限的应用程序通知您的应用程序或缓存系统


编辑:由于您似乎可以控制应用程序B,并且应用程序a中已经有了缓存系统,因此解决问题的最简单方法可能是在应用程序a中创建一个回调,应用程序B可以调用该回调使缓存项过期。两个应用程序都需要就识别缓存项的约定达成一致。

您到底有什么问题?你想达到什么目标?是否要在数据库之间保持同步数据?这些对象没有“上次修改”列吗?你可以利用这个…谢谢你的回复,我编辑了我的回复,希望它能稍微清晰一点。没有神奇的方式通知数据库的更改。重新获取您访问的每个记录(通过SQLAlchemy或其他方式)可能太浪费了。某些数据库允许SP和触发器访问文件或套接字(Oracle有DBMS_管道,Postgres有DMBS_管道和侦听/通知,不知道MySQL)。向B的数据库中添加发送通知的触发器可以解决这个问题。