可以在SQLAlchemy Base对象中使用__init__进行自我初始化吗?

0 投票
1 回答
2119 浏览
提问于 2025-04-18 09:41

假设我有

class Book(Base):
    isbn = Column(String(50), primary_key=True)
    title = Column(String(20))

    def __init__(self, isbn):
        self = session.query(Book).filter(Book.isbn==isbn).first()

foo = Book("isbn info here")

这样写是行不通的,但我找不到相关的文档来说明我该如何让一个init函数来加载一个对象。这样做会比每次都写

harryPotterBook = session.query(Book).filter(Book.isbn=='这里是随机的ISBN信息').first() 来查找一本书要简洁一些

谢谢

1 个回答

2

看起来你对SQLAlchemy是如何从数据库查询生成对象的方式有些误解。

以下内容摘自SQLAlchemy的文档:SQLAlchemy的对象关系映射(ORM)在从数据库行重建对象时,并不会调用__ init __。这个过程有点像Python标准库中的pickle模块,它直接调用低级的__ new __方法,然后悄悄地在实例上恢复属性,而不是调用__ init __。

__ init __是用来创建普通对象的。

撰写回答