【问题标题】: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 设置连接到该数据库。实际上迁移错误只是一个警告。您可以通过managed 到False 进行操作。
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