13

我正在构建一个我想发布的应用程序,我将用 Python 编写该应用程序。我不想将任何特定数据库 sql/nosql 的使用锁定到我的应用程序中。如何设计应用程序或模型层以不强制执行 SQL/NOSQL 方式来存储数据。

是否有可以同时使用这两种存储类型的 ORM?我没有找到一个。通常我会使用 sqlalchemy 来确保人们可以根据需要使用 MySQL/PostgreSQL/MSSQL/etc,但是将 NOSQL 添加到图片中似乎比我最初想象的要复杂。

我有一些要求,例如:

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

如果您知道如何构建这些需求,我将不胜感激。是否可以创建这样的结构:

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

谢谢

4

4 回答 4

9

不,没有那样的东西。

ORM 或 RDBMS 可以依赖 SQL 作为抽象底层数据库的最低标准。大多数 ORM 构建在 Python DB API 之上(由所有 RDBMS Python 绑定或多或少地完整实现)。

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

所以没有什么类似的东西适用于两个世界。

已经有一些方法可以为 NoSQL 语言定义通用查询语言。

例如有 JsonIQ

http://www.jsoniq.org/

但在现实中并没有多少对你有帮助。

于 2013-10-07T18:15:18.577 回答
0

您应该尝试 JSONiq 的 www.28.io 实现。它可作为云服务或内部部署。

于 2013-11-30T14:50:29.583 回答
0

有一个 nosql ORM 工具。它几乎没有依赖关系,所以我猜你可以轻松地在 nosql orm 和 sql orm 工具之间转换对象

目前仅支持 dynamodb 和 redis。

gitlab.com 上的 nosqlmodel

于 2019-12-21T13:03:36.270 回答
0

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

曾经很有希望,但由于 django 社区普遍拒绝添加 NoSQL 的想法,它已经落后了。

于 2016-11-16T05:02:30.583 回答