在特定架构上运行inspectdb

时间:2014-02-24 11:49:57

标签: django postgresql

我想使用inspectdb来为新引入的表构建相应的模型。但看起来这个命令只查找public模式,而新表是另一个模式。

是否可以为inspectdb指定架构?

2 个答案:

答案 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")
        # [...]