如何将Redis与SQLAlchemy集成

时间:2010-12-01 12:36:42

标签: python sqlalchemy nosql redis

我正在学习使用连接到SQL数据库的SQLAlchemy来获得12个标准关系表(例如SQLite或PostgreSQL)。但后来我想将Redis与Python一起用于几个表,特别是对于Redis的快速设置操作。我意识到Redis是NoSQL,但是我可以将它与SQLAlchemy集成以获得SQLAlchemy所拥有的会话和线程处理的好处吗?

是否有Redis SA方言?我找不到它,这可能意味着我错过了一些基本观点。是否有更好的架构我应该考虑使用两种不同类型的数据库?

2 个答案:

答案 0 :(得分:14)

虽然可以设置一个将数据放入redis的ORM,但这不是一个特别好的主意。 ORM旨在公开标准SQL功能。除非你做了很多额外的工作,否则许多在SQL中标准的东西,例如在任意列上查询都不可用。同时,redis具有标准SQL中不存在的集合操作等功能,因此ORM不会使用这些功能。

您最好的选择可能是编写代码以直接与redis交互,而不是尝试使用不合适的抽象 - 通常您会发现从redis获取数据的代码比证明的SQL代码简单得多使用ORM。

答案 1 :(得分:13)

Redis非常擅长它的功能,存储键值并进行简单的原子操作,但是如果你想将它用作关系数据库,那么你真的会感觉很糟糕!就像我一样...这里是我的故事...

我已经做了类似的事情,制作了几个对象来抽象所有redis内部构件暴露原语查询(我在代码中称为过滤器),获取,设置,更新以及更多可以从ORM中获得的方法事实上,如果你只处理localhost,你不会觉得你的应用程序有任何缓慢,你可以使用redis作为关系数据库,但如果你在任何时候尝试将数据库移动到另一个主机,那将代表在网络传输方面存在很多问题,我最终使用redis和他的管道进行了一系列重新入侵的类,这使得我的程序速度提高了900%,使其在本地网络中可用,无论如何我开始将我的数据库库移动到postgres。

这段历史的教训是永远不要尝试用关键值模型建立关系数据库,在基本操作中运行良好,但是在服务器中无法建立关系的代价会带来很高的代价。 / p>

回到你的问题,我不知道任何为sqlalchemy为redis制作适配器的项目,我认为由于每个项目的性质,没有人会对这样的东西真正感兴趣。