【问题标题】:Use existing database with django python将现有数据库与 django python 一起使用
【发布时间】:2016-06-03 15:54:40
【问题描述】:

我有现有的数据库,该数据库正用于另一个使用 python 和 sqlalchemy 的应用程序。现在我想构建 REST API 端点,因为我必须围绕当前代码构建包装器。

我想使用 Django,我没有什么疑问

  1. 我可以为 Django 相关表使用相同的数据库,以便我的其他表也在那里,并且一些 django 生成的表也在同一数据库中

  2. 我想慢慢地将我的应用程序从 sqlachemy 转移到 django ORM,但首先我必须同时使用两者。我的意思是 Django ORM 中的一些模型并在 SqlAlchemy 中休息。这可能吗

【问题讨论】:

    标签: python django postgresql sqlalchemy


    【解决方案1】:

    是的 - 您可以将同一个数据库与两个 ORM 一起使用。您只需要在 Django 中创建 Django 模型并告诉它它是用于哪个表(您可以通过在模型上创建 Meta 子类并提供 db_table 属性来做到这一点)。您可以像现在一样使用 SQLAlchemy 管理其他表。 Django 不会强加自己的 ORM,使用与否是你的选择。

    这里有一份文档可以帮助您入门https://docs.djangoproject.com/en/1.9/howto/legacy-databases/

    【讨论】:

      【解决方案2】:

      可以在 django 中使用现有的数据库。

      您必须告诉 django 忽略此数据库表中的迁移,并使用实际存在的表名,而不是 django 默认的 applabel_model 命名:

      class ModelForExistingTable(models.Model):
      
          class Meta:
             managed = False
             db_table = "ExistingTableName"
      

      对于您的问题:

      1. Django 不关心其他表,只要 django 模型所需的表存在并且匹配您在 django 中定义的约束、索引等。

      2. 您可以从一个 ORM 转移到另一个。如果您同时使用两者,您将在同一个应用程序中拥有两个对象映射和调用。它希望两者都易于处理,在对象之间传递数据,合并视图数据等。

      考虑将所有内容完全移至 django。 Django ORM 是成熟的,功能丰富的,除非你有一些边缘案例——可能可以处理 Sqlalchemy 所做的一切。

      迁移到 django ORM 主要是为了正确定义模型。从那里开始就容易多了,因为 django 继承了查询集、表单和 REST 框架的模型逻辑。模型定义好后,该逻辑通常可用于框架的其他组件。

      https://docs.djangoproject.com/en/1.9/howto/legacy-databases/

      【讨论】:

      • 所以这意味着,首先我可以放入与 sqlalchmey 相同的数据库设置的数据库,然后假设我在 models.py 中只有一个模型,然后如果我使用 python manage.py migrate 然后django 将自动创建它的表而不接触其他表。我说的对吗?
      • 很好的解决方案@Aviah 它只在 django1.9+ 中?
      猜你喜欢
      • 2013-06-27
      • 2017-03-03
      • 1970-01-01
      • 2019-01-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-06-11
      • 2017-07-12
      相关资源
      最近更新 更多