Проблема: при получении столбца таблицы для определенных пользователей выдается значение 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. Вместо того, чтобы запрашивать положительные / отрицательные / итоговые значения и суммировать их вручную. Я ценю любой совет, который можно дать. Спасибо, что посмотрели, ребята