簡體   English   中英

通過主鍵進行SQLAlchemy初始化

[英]SQLAlchemy init by primary key

我正在寫一個基於sqlalchemy的python應用程序。 我想重寫sqlalchemy的init方法,該方法將接受主鍵,然后將其初始化為自己的實例。

像這樣:

class User(Base):
    id = Column(String, primary_key=True)
    name = Column(String)

    def __init__(id):
        self = session.query(User).filter(User.id=id).first()

我知道我可以使用session.query初始化對象,但是我想導出一個很好的簡單api,供其他用戶使用(它將是一個SDK)。

有任何想法嗎? 謝謝!

可以通過init方法執行此操作,盡管我建議不要這樣做。

您的代碼段有兩個問題。

  1. 您忘記了將self參數作為__init__方法的第一個參數
  2. 分配給self無效,但是您可以將self字典替換為其他字典

將這兩件事放在一起:

class User(Base):
    __tablename__ = 'users'
    id = Column(Integer, primary_key=True)
    name = Column(String)

    def __init__(self, user_id):
        res = session.query(User).filter(User.id == user_id).first()
        self.__dict__ = res.__dict__

但是,我建議針對這種非常特定但經常重復的用法添加類方法,即通過primary_key從數據庫獲取實例

@classmethod
def get_by_id(cls, key):
    return session.query(cls).filter(cls.id == key).first()

這樣,對具有單個列主鍵的所有類都是通用的。

這些版本的用法是

u1 = User(user_id=1)
u2 = User.get_by_id(key=1)

暫無
暫無

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

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