【问题标题】:How to specify schema name while running "syncdb" in django?如何在 django 中运行“syncdb”时指定模式名称?
【发布时间】:2012-01-30 15:04:00
【问题描述】:

假设我有一个名为“my_schema”的架构,如何为该特定架构创建带有“django syncdb”的表?或者有没有其他方法可以从我的 django 模型中快速创建表?我认为,默认情况下,django 会为“公共”模式创建表。

【问题讨论】:

  • 您在谈论选项 --database=DATABASE指定要同步的数据库。默认为“默认”数据库。
  • 没有。我指的是模式。 postgresql.org/docs/9.0/static/ddl-schemas.html 。默认情况下,django 使用名为“public”的模式
  • Django 默认不使用“公共”模式。 Psycopg2 默认使用“公共”模式(是的,我已经用 grep 阅读过代码)。您可以尝试在 DATABASE 定义中设置 'OPTIONS': { 'schema': 'yourschema' }(与 'USER'、'HOST' 等处于同一级别)。
  • 根据 psycopg 2.4.1 的源代码,extras.py 第 863 行:您应该在数据库 NAME 设置前加上模式名称和一个点。
  • jpic: extras.py 中的那个代码只在注册一个typecaster自动转换复合类型的时候调用,和设置一个默认的schema名字没有关系,到目前为止,我一直找不到一种方法。

标签: python database django


【解决方案1】:

首先,您必须拥有 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

【讨论】:

    【解决方案2】:

    我使用了以下信息并为我工作

    '默认':{ '引擎': 'django.db.backends.postgresql_psycopg2', 'NAME': 'dab_name', '用户': '用户名', '密码':'密码', '主机':'本地主机', '端口':'5432', '选项': { 'options': '-c search_path=tours' #schema 名称 } }

    在 postgresql 9 和 django 1.10.2 上测试

    谢谢@romke

    【讨论】:

      猜你喜欢
      • 2012-05-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-12
      • 1970-01-01
      • 1970-01-01
      • 2012-02-27
      • 1970-01-01
      相关资源
      最近更新 更多