首页 > 解决方案 > 是否有一个 ORM 结构允许我拥有导致 Catalog.Schema.Table 的表?

问题描述

我目前正在使用预先存在的数据库进行项目。Server是一个集群服务器,有多个Catalogs(数据库),每个Catalog里面有多个Schemas with Tables。传统 SQL 查询的表名格式为 [Catalog].[Schema].[Table]。这种结构适用于传统的 SQL。

当我尝试将烧瓶 db 迁移到 sqlite 数据库进行测试时,问题就出现了。根据我的尝试,我会遇到许多错误。

我在用

我尝试了以下不同的结果:

class User(db.Model):
    __tablename__ = 'user'
    __table_args__ = (
        db.PrimaryKeyConstraint('userid')
        , db.ForeignKeyConstraint(('manageruserid',), ['CatalogA.SchemaA.userid'])
        , {'schema': 'CatalogA.SchemaA'}
    )

    manager_user_id = db.Column('manageruserid', db.Integer())
    user_id = db.Column('userid', db.Integer(), nullable=False)

class Tool(db.Model):
    __tablename__ = 'tool'
    __table_args__ = (
        db.PrimaryKeyConstraint('toolid')
        , db.ForeignKeyConstraint(('ownerid',), ['CatalogA.SchemaA.user.userid'])
        , {'schema': 'CatalogB.SchemaB'}
    )

    tool_id = db.Column('toolid', db.Integer())
    owner_id = db.Column('ownerid', db.Integer(), nullable=False)

尝试升级时会产生错误:

"sqlalchemy.exc.OperationalError: (sqlite3.OperationalError) unknown database "CatalogA.SchemaA" [SQL: CREATE TABLE "CatalogA.SchemaA".user (
        manageruserid INTEGER,
        userid INTEGER NOT NULL,
        PRIMARY KEY (userid),
        FOREIGN KEY(manageruserid) REFERENCES user (userid) )"
class User(db.Model):
    __bind_key__ = 'CatalogA'
    __tablename__ = 'user'
    __table_args__ = (
        db.PrimaryKeyConstraint('userid')
        , db.ForeignKeyConstraint(('manageruserid',), ['CatalogA.SchemaA.user.userid'])
        , {'schema': 'SchemaA'}
    )

    manager_user_id = db.Column('manageruserid', db.Integer())
    user_id = db.Column('userid', db.Integer(), nullable=False)

class Tool(db.Model):
    __bind_key__ = 'CatalogB'
    __tablename__ = 'tool'
    __table_args__ = (
        db.PrimaryKeyConstraint('toolid')
        , db.ForeignKeyConstraint(('ownerid',), ['CatalogA.SchemaA.user.userid'])
        , {'schema': 'SchemaB'}
    )

    tool_id = db.Column('toolid', db.Integer())
    owner_id = db.Column('ownerid', db.Integer(), nullable=False)

尝试迁移时会产生错误:

"sqlalchemy.exc.NoReferencedTableError: Foreign key associated with column 'user.manageruserid' could not find table 'CatalogA.SchemaA.user' with which to generate a foreign key to target column 'userid'"

如果我使用 Schema only 方法,那么我可以在数据库上运行查询,但它没有正确设置我的 test-db。

我找了几个小时试图找到一个解决方案,并且希望有人能帮助我找到前进的方向(如果你找到另一个解决方案的链接,请告诉我你搜索了什么以增加我的 google-fu)。

主要问题是:

标签: pythonsqlalchemyflask-sqlalchemyalembicflask-migrate

解决方案


推荐阅读