在Django中运行“syncdb”时如何指定模式名称?

7

假设我有一个名为“my_schema”的模式,如何使用“django syncdb”为该特定模式创建表?还是有其他快速从我的Django模型创建表的替代方法吗?我认为,默认情况下,Django会为“public”架构创建表。


你是在谈论选项 --database=DATABASE 吗:指定要同步的数据库。默认为“default”数据库。 - jpic
不,我指的是模式。http://www.postgresql.org/docs/9.0/static/ddl-schemas.html。默认情况下,Django使用名为“public”的模式。 - Devasia Joseph
1
Django默认不使用“public”架构。 Psycopg2默认使用“public”架构(是的,我已经用grep阅读了代码)。您可以尝试在DATABASE定义中设置“OPTIONS”:{'schema':'yourschema'}(与“USER”,“HOST”等处于同一级别)。 - jpic
3
根据 psycopg 2.4.1 的源代码,extras.py 第 863 行:您应该在数据库 NAME 设置前加上模式名称和一个点。 - jpic
jpic:extras.py 中的那段代码仅在注册类型转换器以自动转换复合类型时调用,与设置默认模式名称无关。到目前为止,我还没有找到一种方法来实现。 - John
2个回答

6

首先,您必须拥有psycopg2>=2.4.3 [1]。如果您已经拥有此版本,则可以在基于字典的数据库配置的OPTIONS中添加模式,如下所示:

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

此文档在postgresql 8.4和django 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

我使用了以下信息,对我很有效:

'default': { 'ENGINE': 'django.db.backends.postgresql_psycopg2', 'NAME': 'dab_name', 'USER': 'username', 'PASSWORD': 'password', 'HOST': 'localhost', 'PORT': '5432', 'OPTIONS': { 'options': '-c search_path=tours' #模式名称 } }

在postgresql 9和django 1.10.2上进行了测试。

感谢@romke


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接