簡體   English   中英

定義 FK 和子關系時的交叉引用 SQLAlchemy

[英]Cross reference while defining FK and children relationships SQLAlchemy

Class Bed
   id
Class Guest
    id
    bed_assignments = relationship(

          primaryjoin=(
              "and_(Guest.id"
              "==foreign(BedAssignment.guest_id),"
              "BedAssignment.bed_status=='occupied')"
         ),

)

Class BedAssignment
    FK Guest
    FK Bed

每個 class 都在一個文件中,並在 BedAssignment class 中為 FK 目的引用 Guest,在為關系目的引用 BedAssignment 旁邊創建一個交叉引用。

我嘗試使用 FK 或關系引用的文本版本,類似於: Column(Integer, ForeignKey("bed.id")但它似乎是一種解決方法,因為它會停止生成錯誤尋找參考的 alembic 腳本。

在這種關系 model 的情況下如何解決交叉引用?

由於您的關系來自關聯表 + 具有輔助連接規范,因此請按如下方式構建您的關系:

bed_assignments = relationship(
    "Bed", #class name of the table
    secondary = "BedAssignment", #table name of the association table
    # Consider using exact tablenames for your join statement...
    primaryjoin = """and_(
        Guest.id==BedAssignment.guest_id,
        BedAssignment.bed_status=='occupied'
    )""",
    backref=backref("Bed", lazy="dynamic"), # if you want the relationship to be observable on the other class... (Guests as children of Beds)
    lazy='dynamic', #only load as needed
    post_update=True, # this allows updating of dependent rows without collisions or cyclical dependencies 
    )

暫無
暫無

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

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