【问题标题】:How to connect Django to external DB without migrations如何在没有迁移的情况下将 Django 连接到外部数据库
【发布时间】:2018-02-24 06:44:06
【问题描述】:

我想将我的 DjangoApp 连接到外部 MySQL 数据库。 我不想迁移到这个表,我的意思是我不想创建新表,只是拉数据。 我的问题是 - 如何做到这一点? 如果我在我的设置文件中将此表添加到 DATABASES,那么控制台会显示有关强制迁移的错误。

你能推荐我什么? 提前致谢,

【问题讨论】:

标签: python django django-models


【解决方案1】:

您可以通过DATABASES 设置连接到该数据库。实际上迁移错误只是一个警告。您可以通过managedFalse 进行操作。

class MyModel(models.Model):
    field1 = models.CharField()
    ...
    class Meta:
        managed = False

更多info

【讨论】:

    【解决方案2】:

    我建议在这种情况下使用两个数据库。拳头可以使用标准的sqllite db,将用于存储登录数据和管理相关的东西。

    如果您想为遗留数据库创建类定义,您可以使用python manage.py inspectdb > mysql_models.txt。这也会将 managed = False 添加到您的模型类元数据中,并使 django 对丢失的迁移闭嘴。

    强制迁移警告是:警告。您不必应用迁移。

    文档: https://docs.djangoproject.com/en/1.11/topics/db/multi-db/

    在你开始使用遗留数据库之前的一个善意的警告:检查它是否与 django orm 兼容。有一些数据库功能(如复合主键)不适用于 django orm。

    【讨论】:

      【解决方案3】:

      你可以用这个连​​接到外部数据库

      settings.configure(
      DATABASE_ENGINE = 'mysql',
      DATABASE_NAME = 'db_name',
      DATABASE_USER = 'db_user',
      DATABASE_PASSWORD = 'db_pass',
      DATABASE_HOST = 'http://YourDataBaseAdress.com/mydatabase',
      DATABASE_PORT = '6676',
      TIME_ZONE = 'America/Sao_Paulo',) //if you want to connect this forever add this
      'CONN_MAX_AGE': None,
      

      并且无需迁移,您可以这样做

      class Meta:
          managed = False
      

      在您的特定型号中。

      对于从外部数据库中提取数据,您可以看到here

      【讨论】:

        猜你喜欢
        • 2016-11-23
        • 1970-01-01
        • 2023-03-25
        • 2018-11-06
        • 2012-07-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多