Python 当模式名与表名一起传递时,Django migrate不起作用

Python 当模式名与表名一起传递时,Django migrate不起作用,python,sql-server,django,postgresql,Python,Sql Server,Django,Postgresql,我在运行时出错: $ python manage.py migrate 这是一个场景: 我的Postgres数据库中有2个模式。任何地方都可能有2个模式,对吗?可以是SQL Server、Mysql或Oracle中的两个架构 我想把默认的django表放在一个模式中,我想我能够做到。架构名称=:django” 我自己的模型在不同的架构中。这就是我遇到问题的地方。schema name=“data” 如果我在模型的元类中不使用schema,那么我的模型就可以正常工作。要在db_table选项中添

我在运行时出错:

$ python manage.py migrate
这是一个场景:

我的Postgres数据库中有2个模式。任何地方都可能有2个模式,对吗?可以是SQL Server、Mysql或Oracle中的两个架构

  • 我想把默认的django表放在一个模式中,我想我能够做到。架构名称=:django”

  • 我自己的模型在不同的架构中。这就是我遇到问题的地方。schema name=“data”

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

    我看了很多帖子,但他们认为我会永远使用PostgreSQL,所以他们建议使用租户之类的工具…我相信它只适用于PostgreSQL。我不想使用它的原因是因为我的项目将不再是可移植的,如果我想转移到SQL Server、Mysql或Oracle,那怎么办?我必须进行修改在我的项目中,我不想这样

    我也读过关于在我的meta中使用选项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;
    

    非常感谢您的帮助。

    我解决了相同的错误,我遇到了如下问题:

    db_table = "'sellers'"
    
    所以我把它改成了

    db_table = 'sellers' 
    

    然后迁移工作正常。也许你可以尝试以同样的方式更改代码。

    你能提供SQL迁移生成的内容吗:?Hi@vanadium23。我刚刚在我的帖子中添加了它。你会很快看到问题,但我如何修复它?这是我的大问题。我不认为Django framework希望我们编写一个片段来解决它。