Column_property在应返回值时不返回任何值

时间:2020-08-03 09:01:23

标签: python postgresql sqlalchemy

问题:检索表的列时,某些用户的值为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就能获得用户的反馈。不必查询正/负/总计并手动对其求和。我感谢可以提供的任何建议。谢谢大家的光临

0 个答案:

没有答案