当模式名称与表名

时间:2016-04-24 07:15:10

标签: python sql-server django postgresql

我跑步时出错:

$ python manage.py migrate

这是一个场景:

我的Postgres数据库中有2个模式。它可能在任何地方都有2个模式,对吧?可以是SQL Server,Mysql或Oracle中的2个模式。

  1. 我想将默认的django表放在一个架构中,我想我能够做到这一点。架构名称=:django"。

  2. 我自己的模型在不同的架构中。这是我遇到问题的地方。架构名称="数据"

  3. 如果我不在模型中的Meta类中使用模式,我的模型就可以正常工作。要在db_table选项中添加模式名称,必须使用""引用,这是问题所在。您实际上可以使用""在所需的架构中创建模型。引号(" schema_name"。" table_name"),但问题出现在Django尝试创建模型的索引时。 PostgreSQL不需要或不希望传递模式名称,这就是它出错的原因。

    我看到很多帖子,但他们认为我将永远使用PostgreSQL,所以他们建议使用像租户这样的工具...... blablabla,我认为它只适用于PostgreSQL。我之所以不想使用它,是因为我的项目不再可移植了,如果我想迁移到SQL Server,Mysql或Oracle呢?我必须在我的项目中进行修改,我不希望这样。

    我还读到了在我的meta中使用选项db_schema,但它根本不起作用。似乎Django没有识别db_schema属性。

    这是我的代码:

    型号:

    class ClientCode(models.Model):
        client_code_id = models.AutoField(primary_key=True)
        client_code_name = models.CharField(max_length=255)
        client_name = models.CharField(max_length=255)
        is_inactive = models.BooleanField(default=False)
        is_billable = models.BooleanField(default=True)
        is_internal = models.BooleanField(default=True)
        company = models.ForeignKey('companies.Company',related_name='clientcodes')
        slug = models.SlugField(unique=True, default='')
    
    
        def get_absolute_url(self):
            return reverse("clientcodes:details", kwargs = {"slug": self.slug})
    
    
        class Meta:
            unique_together = ('company','client_code_name')
            ordering = ['client_code_name']
            db_table = '"data"."client_code"'
            # app_label = 'company_clientcodes'
    
        def __str__(self):
            return '%s: %s' % (self.client_code_name, self.client_name)
    

    这是错误:

    django.db.utils.ProgrammingError: zero-length delimited identifier at or near """"
    LINE 1: CREATE INDEX ""data"."client_code"_447d3092" ON "data"."clie...
    

    SQLMigrate代码结果:

    BEGIN;
    --
    --  Create model ClientCode
    --
    CREATE TABLE "data"."client_code" ("client_code_id" serial NOT NULL PRIMARY    KEY, "client_code_name" varchar(255) NOT NULL, "client_name" varchar(255) NOT NULL, "is_inactive" boolean NOT NULL, "is_billable" boolean NOT NULL, "is_internal" boolean NOT NULL, "slug" varchar(50) NOT NULL UNIQUE, "company_id"  integer NOT NULL);
    --
    -- Alter unique_together for clientcode (1 constraint(s))
    --
    ALTER TABLE "data"."client_code" ADD CONSTRAINT     "data_client_code_company_id_e066ecc7_uniq" UNIQUE ("company_id",    "client_code_name");
     ALTER TABLE "data"."client_code" ADD CONSTRAINT  "data_client_code_company_id_bf78b136_fk_data_company_company_id" FOREIGN KEY  ("company_id") REFERENCES "data"."company" ("company_id") DEFERRABLE INITIALLY  DEFERRED;
    CREATE INDEX ""data"."client_code"_447d3092" ON "data"."client_code"     ("company_id");
    CREATE INDEX "data_client_code_slug_d0a8e64d_like" ON "data"."client_code" ("slug" varchar_pattern_ops);
    
    COMMIT;
    

    感谢任何帮助。

0 个答案:

没有答案