我想使用inspectdb来为新引入的表构建相应的模型。但看起来这个命令只查找public
模式,而新表是另一个模式。
是否可以为inspectdb
指定架构?
答案 0 :(得分:9)
是的,您必须通过在settings.py的DATABASES变量中添加一个选项来指定search_path,如下所示:
'OPTIONS': {
'options': '-c search_path=myschema'
}
完整的DATABASES变量应为:
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.postgresql_psycopg2',
'NAME': 'mydatabase',
'USER': 'postgres',
'PASSWORD': 'mypassword',
'HOST': 'localhost',
'PORT': '5432',
'OPTIONS': {
'options': '-c search_path=myschema'
}
}
}
之后python manage.py inspectdb
应该适用于您的架构
答案 1 :(得分:3)
根据this Gist,我修改了django.core.management.commands.inspectdb
:在handle_inspection()
后面的第32行,cursor = connection.cursor()
之后,添加了cursor.execute("SET search_path TO myotherschema")
。
def handle_inspection(self, options):
connection = connections[options.get('database')]
table2model = lambda table_name: table_name.title().replace('_', '').replace(' ', '').replace('-', '')
cursor = connection.cursor()
cursor.execute("SET search_path TO myotherschema")
# [...]
至少,Django 1.9:
def handle_inspection(self, options):
# [...]
with connection.cursor() as cursor:
cursor.execute("SET search_path TO myotherschema")
# [...]