我在 SQLAlchemy 中的兩個物體之間的映射關系有問題。我正在嘗試實作下一個行為-> 映射到用戶所有相關的反饋。關系receiver_id
在另一邊,等于user_id
。因此,用戶 1 正在為用戶 2 發送反饋,當我獲得用戶 2 物件時,我試圖將它們作為串列獲取。我有下一個代碼
class User(Base):
__tablename__ = "user"
user_id = sa.Column('user_id', UUID(as_uuid=True), primary_key=True, default=uuid.uuid4)
first_name = sa.Column('first_name', sa.String)
last_name = sa.Column('last_name', sa.String)
phone_number = sa.Column('phone_number', sa.String(20), unique=True)
email = sa.Column('email', sa.String, unique=True)
is_active = sa.Column('is_active', sa.Boolean, server_default=expression.true(), nullable=False)
deleted = sa.Column('deleted', sa.Boolean, server_default=expression.false(), nullable=False)
created_time = sa.Column('created_time', sa.DateTime, server_default=func.now(), nullable=False)
updated_time = sa.Column('updated_time', sa.DateTime, server_default=func.now(), nullable=False)
deleted_time = sa.Column('deleted_time', sa.DateTime)
feedbacks = relationship('UserFeedback', primaryjoin='User.user_id == UserFeedback.receiver_id', uselist=True, lazy='dynamic', backref='user_feedback')
class UserFeedback(Base):
__tablename__ = "user_feedback"
id = sa.Column('id', sa.Integer, primary_key=True, autoincrement=True)
sender_id = sa.Column(UUID(as_uuid=True), ForeignKey("user.user_id"), nullable=False)
receiver_id = sa.Column(UUID(as_uuid=True), ForeignKey("user.user_id"), nullable=False)
sender = relationship("User", foreign_keys=[sender_id])
receiver = relationship("User", foreign_keys=[receiver_id])
rating = sa.Column('rating', sa.DECIMAL, nullable=False)
feedback = sa.Column('feedback', sa.String, nullable=False)
date = sa.Column('date', sa.DateTime, server_default=func.now(), nullable=False)
我已經用用戶反饋填充了資料庫,但是當我拉出用戶 ORM 時,并沒有映射相關的反饋。它實際上甚至沒有這個欄位,所以這有點令人困惑
我正在學習 SQLAlchemy,因此非常感謝您的幫助或建議
uj5u.com熱心網友回復:
問題是您正在dynamic
為關系使用加載策略(檔案在此處)。
使用 查詢時lazy = 'dynamic'
,SQLAlchemy 會生成單獨的查詢,而不是獲取實際結果。因此,在您的初始 casefeedbacks
屬性中包含另一個您可以手動執行select
的陳述句(型別)。AppenderQuery
要簡單地獲取相關資料,只需將“動態”更改為“已加入”。
您可以在檔案或這篇漂亮的帖子中閱讀有關關系加載策略的更多資訊。
轉載請註明出處,本文鏈接:https://www.uj5u.com/caozuo/498452.html
標籤:Python PostgreSQL sqlalchemy 形式
上一篇:ejs表單,發送可以轉換成postgresql更新查詢的資料陣列
下一篇:具有冗余值的漸進等級