2011-12-30 4 views
7

Предполагая, что у меня есть схема с именем «my_schema», как мне создать таблицы с «django syncdb» для этой конкретной схемы? Или есть ли другие альтернативы для быстрого создания таблиц из моих моделей django? Я думаю, по умолчанию django создает таблицы для «общедоступной» схемы.Как указать имя схемы во время работы «syncdb» в django?

+0

Вы говорите о опции ** - database = DATABASE **: * Назначает базу данных для синхронизации. По умолчанию используется база данных по умолчанию. * – jpic

+0

Нет. Я имею в виду схему. http://www.postgresql.org/docs/9.0/static/ddl-schemas.html. По умолчанию django использует схему с именем «public» –

+1

Django по умолчанию не использует «общедоступную» схему. Psycopg2 использует общедоступную схему по умолчанию (да, я прочитал код с grep). Вы можете попробовать установить «ВАРИАНТЫ»: {'schema': 'yourschema'} в вашем определении DATABASE (на том же уровне, что и «USER», «HOST» и т. Д.). – jpic

ответ

5

Во-первых, вы должны иметь psycopg2> = 2.4.3 [1]. Если у вас есть, то вы можете добавить схему для OPTIONS в конфигурации базы данных на основе словаря, например:

DATABASES = { 
    'default': { 
    'ENGINE': 'django.db.backends.postgresql_psycopg2', 
    # ... 
    'OPTIONS': { 
     'options': '-c search_path=my_schema' 
    } 
    } 
} 

Проверено на PostgreSQL 8.4 и Джанго 1,3

  1. http://initd.org/psycopg/docs/module.html?highlight=connect#psycopg2.connect
  2. http://www.postgresql.org/docs/8.4/static/libpq-connect.html#LIBPQ-CONNECT-OPTIONS
0

Я воспользовался нижеследующей информацией и работаем для меня

'по умолчанию': { 'МОТОРА': 'django.db.backends.postgresql_psycopg2', 'NAME': 'dab_name', 'USER': 'имени пользователя', 'PASSWORD': 'пароль', ' HOST ": 'локальный', 'PORT': '5432', 'OPTIONS': { 'Опции': '-c search_path = имя #schema Турс'}}

Проверено на 9 и PostgreSQL django 1.10.2

Thanks @romke