这是我在 sqlalchemy 中使用的一些非常简单的代码,我在这里遗漏了一些关于类如何工作的基本内容。
class Game(Base):
__tablename__ = "games"
id = Column(Integer, primary_key=True)
a_name = Column(String)
def __init__(self, **kwargs):
for k, v in kwargs.iteritems():
setattr(self, k, v)
print 'hi'
self.away_dictionary = {'name': self.a_name}
@hybrid_property
def stuff(self):
return self.away_dictionary
以下查询有效:
session.query(Game).first().a_name
但以下查询返回错误:
session.query(Game).first().stuff
'Game' object has no attribute 'away_dictionary'
我还有一个更基本的问题,当我查询 Game 类时它没有打印出“hi”。那么有人可以解释为什么每次我使用 Game 实例时都没有打印出“hi”吗?第二个问题是如何构建和访问我想要为此类的每个实例拥有的 away_dictionary?
最佳答案
您没有在上面的查询中创建 Game 实例,您只传递了 Game 类对象。因此永远不会调用 init() 构造函数。
如果你需要一个 Game 实例来查询,你需要这个:session.query(Game()).first().stuff
.
关于Python 类 __init__ 不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17256604/