簡體   English   中英

表中存在SQLAlchemy column_property

[英]SQLAlchemy column_property exist in table

假設我有三個表。

class A(Base):
  id = Column(Integer, primary_key=True)
  bs = association_proxy("a_b", "b")

class B(Base):
  id = Column(Integer, primary_key=True)
  extra = Column(String(10), nullable=True)
  as = association_proxy("a_b", "a")

class A_B(Base):
  __table_args__ = (
    UniqueConstraint('a_id', 'b_extra'),
    )
  a_id = Column(Integer, ForeignKey('A.id'), primary_key=True)
  b_id = Column(Integer, ForeignKey('B.id'), primary_key=True)
  b_extra = column_property(
    select([B.extra]).where(B.id=b_id)
    )
  b = relationship("B", backref="a_b")
  a = relationship("A", backref="a_b")

和數據庫架構:

CREATE TABLE A (
  id INT(11) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (id)
)
CREATE TABLE B (
  id INT(11) NOT NULL AUTO_INCREMENT,
  extra INT(11) NOT NULL,
  PRIMARY KEY (id)
)
CREATE TABLE A_B (
  a_id INT(11) NOT NULL,
  b_id INT(11) NOT NULL,
  b_extra INT(11) NOT NULL,
  UNIQUE KEY ('a_id', 'b_extra'),
  KEY a_id,
  KEY b_id,
  CONSTRAINT FOREIGN KEY ('b_extra') REFERENCES 'B' ('extra'),
  CONSTRAINT FOREIGN KEY ('b_id') REFERENCES 'B' ('id'),
  CONSTRAINT FOREIGN KEY ('a_id') REFERENCES 'A' ('id')
)

這個想法是A_B是A和B之間的關聯表。B中的額外數據不是每個B唯一,但是每個A 都是唯一的。我遇到的問題是,當我嘗試運行腳本時,我得到了Key Error: b_extra 我嘗試了所有我能想到的骯臟技巧,但對於如何解決這個問題我卻茫然。

編輯:澄清一下,我希望column_property存在於數據庫中,並像正常情況一樣參與更新和插入。

與實際應用程序相比,這是一個稍微簡化的示例,因為它太復雜了,無法在此處發布。

這里的問題是您的A_B表有一個名為“ b_extra”的列,但是在您的A_B映射上,您正在使用column屬性覆蓋“ b_extra”,該屬性試圖在其他表“ B.extra”上加載其他列”。

此處的意圖尚不明確,但似乎您會擺脫A_B.b_extra,因為您似乎不想對其寫任何東西。 或者,如果您確實希望B.extra和A_B.b_extra同時存在,則需要將這兩個表達式映射到不同的名稱。

A_B.b_extra列屬性也有點怪異,因為在會話到期之間,它不會與到該屬性的關系路由保持同步,該關系路由只是some_a_b.b.extra。

暫無
暫無

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

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