Column_property не возвращает ничего, когда должно возвращать значение - PullRequest
0 голосов
/ 03 августа 2020

Проблема: при получении столбца таблицы для определенных пользователей выдается значение 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")

Допустим, пользователь Джон имеет 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

Он возвращает None для John. Тем не менее, я могу сделать это для Салли, Адама и Джейка, и итоги будут правильно возвращены для этих пользователей.

Ожидаемое поведение:

Когда я запрашиваю таблицу Users для John и попытайтесь выполнить John.total, он должен вернуть, что у него 4 отзыва, суммируя разницу между положительным (+1) и отрицательным (-1) feedback_type. Вот как будет выглядеть запрос 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.total, John.positive или John.negative. Вместо того, чтобы запрашивать положительные / отрицательные / итоговые значения и суммировать их вручную. Я ценю любой совет, который можно дать. Спасибо, что посмотрели, ребята

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...