簡體   English   中英

SQLAlchemy無法使用主鍵反映表

[英]SQLAlchemy can't reflect table with primary key

這些是類:

class User(db.Model):
    __tablename__ = 'Users'
    UserID = db.Column(
        db.Integer,
        primary_key=True,
        autoincrement=True,
        nullable=False
    )
    FirstName = db.Column(db.String(255), nullable=False)
    LastName = db.Column(db.String(255), nullable=False)
    Username = db.Column(db.String(255), nullable=False)
    Password = db.Column(db.String(255), nullable=False)

class UserType(db.Model):
    __tablename__ = 'UserTypes'
    TypeID = db.Column(
        db.Integer,
        primary_key=True,
        autoincrement=True,
        nullable=False
    )
    Type = db.Column(db.String(255), nullable=False)

    __table_args__ = (
        db.CheckConstraint(
            "Type IN ('Role1', 'Role2', 'Role3')"
        ),
    )


class UserPrivilege(db.Model):
    __tablename__ = 'UserPrivileges'
    UserID = db.Column(db.Integer, primary_key=True)
    UserTypeID = db.Column(db.Integer, primary_key=True)

    __table_args__ = (
        db.ForeignKeyConstraint(
            ['UserID'],
            ['Users.UserID'],
        ),
        db.ForeignKeyConstraint(
            ['UserTypeID'],
            ['UserTypes.TypeID'],
        ),
    )

    PrivilegeUserInfoBackref = db.relationship(
        'User',
        backref='PrivilegeUserInfoBackref',
        lazy=True,
    )
    PrivilegeUserTypeInfoBackref = db.relationship(
        'UserType',
        backref='PrivilegeUserTypeInfoBackref',
        lazy=True,
    )

這是反映表格的代碼:

Base = automap_base()
engine = sa.create_engine(
    DATABASE_CONNECTION,
    convert_unicode=True,
    pool_size=10,
    max_overflow=20
)
db_session = scoped_session(sessionmaker(autocommit=False,
                                         autoflush=False,
                                         bind=engine))
Base.prepare(engine, reflect=True)

'Users'和'UserTypes'類出現在Base.classes._data中,但由於某些原因,'UserPrivileges'不在Base.classes._data中出現。 我設法找到的是沒有主鍵的表無法反映出來,但是正如您所看到的,這里不是這種情況。 我還有其他一些表,這些表具有帶主引用的復合主鍵,但是可以正常顯示。

因此,請問有人可以給我任何建議以反映上一張表格嗎?

UserPrivilege創建的表在多對多關系的“輔助”表的所有方框中UserPrivilege ,因此在使用自動映射擴展名時不會直接映射。 “基本用法”的注釋中也解釋了此行為:

通過viable ,我們的意思是要映射的表必須指定一個主鍵。 此外,如果檢測到該表是其他兩個表之間的純關聯表,則不會直接映射該表,而是將其配置為兩個引用表的映射之間的多對多表。

您的表應作為Base.metadata.tables['UserPrivileges']

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM