问题:检索表的列时,某些用户的值为None。
那到底是什么意思呢?假设我们有下表“反馈”和“用户”。
这里是我的数据库代码,
class Feedback(Base):
__tablename__ = "feedback"
post_id = Column(String(10), primary_key=True)
author = Column(String(100))
receiver = Column(String(100), ForeignKey('users.name'))
message = Column(Text(10000),default=None)
feedback_type = Column(Integer())
count_to_total = Column(Boolean(),default=True)
def __init__(self, post_id, author, receiver, feedback_type, message=None, count_to_total=True):
self.post_id = post_id
self.author = author
self.receiver = receiver
self.message = message
self.feedback_type = feedback_type
self.count_to_total = count_to_total
class Users(Base):
__tablename__ = 'users'
name = Column(String(100), primary_key=True)
total = column_property(select([func.sum(Feedback.feedback_type)]).where(Feedback.receiver==name and (Feedback.feedback_type==1 or Feedback.feedback_type==-1)).correlate_except(Feedback))
feedback = relationship("Feedback")
比方说,用户John在“反馈”表中有4个正面反馈。我可以查询“反馈”表进行检查,
SELECT * FROM Feedback where receiver=="John";
所以我知道它们存在并且它们都是积极的。当我运行脚本并尝试从User表中获取总反馈时,
johns_fb = db.session.query(Users).filter_by(name="John").first()
它返回一个Users对象,因此找到了John的实例。现在,当我这样做时,
print(johns_fb.total)
$ None
它为John返回None。但是,我可以为Sally,Adam和Jake做到这一点,并且总计可以为这些用户正确回报。
预期行为:
当我在Users表中查询John并尝试执行John.total时,应该通过对正(+1)和负(-1)feedback_type之差求和来返回他有4个反馈。这是SQL查询的样子,
SELECT SUM(feedback_type) FROM Feedback WHERE receiver=="John";
or
SELECT SUM(feedback_type) FROM Feedback WHERE receiver=="John" and (feedback_type==1 or feedback_type==-1);
这些查询都将返回SUM(feedback_type)=4。我认为这与我的column_property映射有关,但是,我遵循了
到T,对于John仍然不起作用。我之所以使用列属性,是因为我希望仅通过执行John.total或John.positive或John.negative就能获得用户的反馈。不必查询正/负/总计并手动对其求和。我感谢可以提供的任何建议。谢谢大家的光临