我已经尝试了一整周解决这个问题,非常感谢您的帮助。
我在Postgres数据库中有不同的模式,并且我想能够从同一或不同的Django应用程序中进行映射到它们。
其中一些模式是 :
samples
excavation
geophysics
...
我已经尝试了推荐的方法,但我无法从这些模式中显示任何数据,我只能连接到具有管理表的public模式。以下是来自settings.py文件的数据库连接信息。
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'OPTIONS': {
'options': '-c search_path=django,public'
},
'NAME': 'gygaia',
'USER': 'appuser',
'PASSWORD': 'secret',
},
'samples': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'OPTIONS': {
'options': '-c search_path=samples,public'
},
'NAME': 'gygaia',
'USER': 'appuser',
'PASSWORD': 'secret',
},
}
来源:https://www.amvtek.com/blog/posts/2014/Jun/13/accessing-multiple-postgres-schemas-from-django/
在 model.py 中我添加了:
from django.db import models
# Create your models here.
class Storage(models.Model):
#id = models.IntegerField(default=0)
storage_id = models.AutoField(primary_key=True)
store_name = models.CharField(max_length=200, default='')
address_1 = models.CharField(max_length=200, default='')
address_2 = models.CharField(max_length=200, default='')
region = models.CharField(max_length=200, default='')
city = models.CharField(max_length=200, default='')
zip = models.CharField(max_length=200, default='')
country = models.CharField(max_length=200, default="Turkey")
user = models.CharField(max_length=200, default="Gygaia")
datestamp = models.DateTimeField(auto_now=True)
class Meta():
managed=False
db_table = 'samples\".\"store'
我不想将模式限制在用户中,而且数据库是几年前创建的,所以我不能将其全部归于一个模式下。我知道stackoverflow和互联网的其他角落中发布了各种解决方案,我已经尝试过这些方法,但我无法使其正常工作。有任何解决方法吗?
python manage.py migrate --database <db-config-name> <app-name>
命令才能将迁移应用到正确的数据库中。我还必须为路由器类实现allow_migrate
和allow_relation
方法,不确定是否适用于所有情况。欲了解更多信息,请参见https://docs.djangoproject.com/en/3.1/topics/db/multi-db/#topics-db-multi-db-routing。 - lukecampbellallow_migrate
调用基于模型路由变得困难。Django似乎没有为我的模型调用allow_migrate
。正在进行中。 - NeilG