Python有没有适用于SQL和NoSQL的ORM?

13

我正在开发一个应用程序,希望发布到市场,我将用Python编写这个应用程序。我不想将任何特定的数据库SQL / NOSQL锁定到我的应用程序中。那么如何设计应用程序或模型层以不强制执行SQL / NOSQL来存储数据呢?

有没有一种ORM可以同时使用两种类型的存储方法?我没有找到。通常我会使用SQLAlchemy来确保用户可以选择MySQL / PostgreSQL / MSSQL等等,但是将NOSQL加入其中似乎比我最初想象的要复杂。

我的一些要求如下:

  • 我不想强制使用任何存储后端,这是为了确保不会吓到用户使用该应用程序。
  • 它必须支持数据架构迁移(在安装或升级过程中)

如果您有任何想法,可以帮助我设计满足这些要求的结构吗?是否可能创建这样的结构:

    +-----+
    + app +
    +-----+
       |
+-------------+
+ Data Access +
+-------------+
        |
+-----------+
+ SQL/NOSQL +
+-----------+

感谢

6个回答

11

没有这样的东西。

ORM或RDBMS可以依赖SQL作为抽象底层数据库的最小标准。大多数ORM都建立在Python DB API之上(所有RDBMS Python绑定都实现了它)。

对于NoSQL,既没有标准查询语言,也没有标准驱动程序API。

因此,在这两个世界中都没有这样的东西可用。

已经有一些方法来定义NoSQL语言的通用查询语言。

例如,有JsonIQ

http://www.jsoniq.org/

但是实际上没有太多帮助你的东西。


谢谢你的回答,那我得决定一下是选择 NoSQL 还是 SQL。我会看看 jsoniq 的。 - DoRivard

0
我建议你在持久层之前建立一个数据访问层,这样你就可以自由选择任何你想要的ORM。当然,你也可以构建自己的微型ORM。

0
MongoEngine 是一个对象文档映射器(ODM),类似于基于 SQL 的对象关系映射器(ORM)。MongoEngine 提供了一种基于类的抽象,因此您创建的所有模型都是类。
这有助于您避免创建所有 CRUD 操作的机制。

0
你应该尝试使用www.28.io实现的JSONiq。它可以作为云服务或本地部署。

0

我见过的最接近抽象层的是django-nonrel。这是django的一个分支,支持Mongo、Google的NoSQL数据库和其他一些数据库。

曾经它很有前途,但由于django社区普遍拒绝添加NoSQL,它已经落后了。


0

有一种nosql ORM工具。它几乎没有依赖,因此您可以轻松地在nosql orm和sql orm工具之间转换对象。

目前仅支持dynamodb和redis。

gitlab.com上的nosqlmodel


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接