Advertisement
Guest User

Untitled

a guest
Feb 26th, 2017
72
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.66 KB | None | 0 0
  1. def update_most_viewed():
  2. query = QuestionViewHistory.query.filter_by(counted=False).distinct()
  3. question_count = query.count()
  4. frame_size = 1000
  5. counter = 0
  6.  
  7. while counter <= question_count:
  8. all_questions = query.offset(counter*frame_size).limit(frame_size).all()
  9. counter = counter + frame_size
  10.  
  11. for question in all_questions:
  12. most_viewed_question = MostViewedQuestion.query.filter_by(question_id=question.question_id).first()
  13.  
  14. if most_viewed_question is None:
  15. most_viewed_question = MostViewedQuestion(question.question_id, question.view_count)
  16. db.session.add(most_viewed_question)
  17. else:
  18. most_viewed_question.view_count += question.view_count
  19.  
  20. question.counted = True
  21.  
  22. db.session.commit()
  23.  
  24. app = Flask(__name__)
  25. db = SQLAlchemy(app)
  26.  
  27. class MostViewedQuestion(db.Model):
  28. __tablename__ = 'most_viewed_question'
  29.  
  30. id = db.Column(db.Integer, primary_key=True)
  31. question_id = db.Column(db.Integer)
  32. view_count = db.Column(db.Integer)
  33. is_associated = db.Column(db.Boolean)
  34. can_be_associated = db.Column(db.Boolean)
  35. title = db.Column(db.String(500))
  36. body = db.Column(db.String(30000))
  37. tags = db.Column(db.String(500))
  38. last_update_date = db.Column(db.DateTime)
  39.  
  40. def __init__(self, question_id, view_count, is_associated=False):
  41. self.question_id = question_id
  42. self.view_count = view_count
  43. self.is_associated = is_associated
  44. self.can_be_associated = True
  45. self.last_update_date = datetime.datetime.now()
  46.  
  47. def __repr__(self):
  48. return '<MostViewedQuestion %s>' % str(self.id)
  49.  
  50. class QuestionViewHistory(db.Model):
  51. __tablename__ = 'question_view_history'
  52.  
  53. id = db.Column(db.Integer, primary_key=True)
  54. question_id = db.Column(db.Integer)
  55. view_count = db.Column(db.Integer)
  56. view_date = db.Column(db.DateTime)
  57. counted = db.Column(db.Boolean)
  58.  
  59. def __init__(self, question_id, view_count, view_date):
  60. self.question_id = question_id
  61. self.view_count = view_count
  62. self.view_date = view_date
  63. self.counted = False
  64.  
  65. def __repr__(self):
  66. return '<QuestionViewHistory %s>' % str(self.id)
  67.  
  68. for question in all_questions:
  69. most_viewed_question = MostViewedQuestion.query.filter_by(question_id=question.question_id).first()
  70.  
  71. most_viewed_questions = MostViewedQuestion.query.filter_by(question_id.in_=questions)
  72.  
  73. from sqlalchemy import not_, select, exists
  74.  
  75. update_query = MostViewedQuestion.__table__.update().values(
  76. view_count=MostViewedQuestion.view_count + QuestionViewHistory.view_count
  77. ).where(and_(
  78. MostViewedQuestion.question_id == QuestionViewHistory.question_id,
  79. QuestionViewHistory.counted == True
  80. ))
  81.  
  82. UPDATE most_viewed_question SET view_count=(most_viewed_question.view_count + question_view_history.view_count)
  83. FROM question_view_history
  84. WHERE most_viewed_question.question_id = question_view_history.question_id
  85. AND question_view_history.counted = true
  86.  
  87. insert_query = MostViewedQuestion.__table__.insert().
  88. from_select([MostViewedQuestion.question_id, MostViewedQuestion.view_count],
  89. select([QuestionViewHistory.question_id, QuestionViewHistory.view_count]).
  90. where(and_(not_(exists([MostViewedQuestion.question_id]).where(MostViewedQuestion.question_id == QuestionViewHistory.question_id)
  91. ), # WHERE ... AND ...
  92. QuestionViewHistory.counted == True))
  93. )
  94.  
  95. SESSION.execute(update_query)
  96. SESSION.execute(insert_query)
  97. SESSION.commit()
  98.  
  99. INSERT INTO most_viewed_question (question_id, view_count)
  100. SELECT question_view_history.question_id, question_view_history.view_count
  101. FROM question_view_history
  102. WHERE NOT (EXISTS (
  103. SELECT most_viewed_question.question_id
  104. FROM most_viewed_question
  105. WHERE most_viewed_question.question_id = question_view_history.question_id))
  106. AND question_view_history.counted = true
  107.  
  108. def update_most_viewed():
  109. reader_session = db_session()
  110. question_count = reader_session.query(func.count(QuestionViewHistory.id)).filter_by(counted=False).scalar()
  111. query = reader_session.query(QuestionViewHistory.id, QuestionViewHistory.question_id, QuestionViewHistory.view_count).filter_by(counted=False)
  112. frame_size = 1000
  113. progress_index = 0
  114. counter = 0
  115.  
  116. print "Questions to update: %s, frame size: %s" % (question_count, frame_size)
  117.  
  118. while counter <= question_count:
  119. all_questions = query.offset(0).limit(frame_size).all()
  120. counter = counter + frame_size
  121.  
  122. wiriter_session = db_session()
  123. for question in all_questions:
  124. record_id, question_id, view_count = question
  125. most_viewed_question = wiriter_session.query(MostViewedQuestion).filter_by(question_id=question_id).first()
  126. if most_viewed_question is None:
  127. most_viewed_question = MostViewedQuestion(question_id, view_count)
  128. wiriter_session.add(most_viewed_question)
  129. else:
  130. most_viewed_question.view_count += view_count
  131.  
  132. qh = wiriter_session.query(QuestionViewHistory).filter_by(id=record_id).first()
  133. qh.counted = True
  134. wiriter_session.add(qh)
  135.  
  136. print_progress_bar(progress_index, question_count, prefix = 'Progress:', suffix = 'Complete')
  137. progress_index +=1
  138.  
  139. wiriter_session.commit()
  140. wiriter_session.close()
  141.  
  142. print "All questions were counted"
  143.  
  144. all_questions = query.offset(0).limit(frame_size).all()
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement