[英]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方法執行此操作,盡管我建議不要這樣做。
您的代碼段有兩個問題。
self
參數作為__init__
方法的第一個參數 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.