可以在SQLAlchemy Base对象中使用__init__进行自我初始化吗?
假设我有
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 __是用来创建普通对象的。