Use PonyORM instead of class RecordQuery from UseSqlite.py. Incorporated changes from Pull Request 91 contributed by He Zhengzheng.
							parent
							
								
									ed1d0fd714
								
							
						
					
					
						commit
						d2f30daab1
					
				|  | @ -1,6 +1,5 @@ | |||
| from WordFreq import WordFreq | ||||
| from wordfreqCMD import youdao_link, sort_in_descending_order | ||||
| from UseSqlite import InsertQuery, RecordQuery | ||||
| import pickle_idea, pickle_idea2 | ||||
| import os | ||||
| import random, glob | ||||
|  | @ -8,6 +7,7 @@ import hashlib | |||
| from datetime import datetime | ||||
| from flask import Flask, request, redirect, render_template, url_for, session, abort, flash, get_flashed_messages | ||||
| from difficulty import get_difficulty_level_for_user, text_difficulty_level, user_difficulty_level | ||||
| from model.article import get_all_articles, get_article_by_id, get_number_of_articles | ||||
| import logging | ||||
| 
 | ||||
| path_prefix = './' | ||||
|  | @ -15,11 +15,7 @@ db_path_prefix = './db/'  # comment this line in deployment | |||
| 
 | ||||
| 
 | ||||
| def total_number_of_essays(): | ||||
|     rq = RecordQuery(db_path_prefix + 'wordfreqapp.db') | ||||
|     rq.instructions("SELECT * FROM article") | ||||
|     rq.do() | ||||
|     result = rq.get_results() | ||||
|     return len(result) | ||||
|     return get_number_of_articles() | ||||
| 
 | ||||
| 
 | ||||
| def get_article_title(s): | ||||
|  | @ -33,21 +29,19 @@ def get_article_body(s): | |||
| 
 | ||||
| 
 | ||||
| def get_today_article(user_word_list, visited_articles): | ||||
|     rq = RecordQuery(db_path_prefix + 'wordfreqapp.db') | ||||
|     if visited_articles is None: | ||||
|         visited_articles = { | ||||
|             "index" : 0,  # 为 article_ids 的索引 | ||||
|             "article_ids": []  # 之前显示文章的id列表,越后越新 | ||||
|         } | ||||
|     if visited_articles["index"] > len(visited_articles["article_ids"])-1:  # 生成新的文章,因此查找所有的文章 | ||||
|         rq.instructions("SELECT * FROM article") | ||||
|         result = get_all_articles() | ||||
|     else:  # 生成阅读过的文章,因此查询指定 article_id 的文章 | ||||
|         if visited_articles["article_ids"][visited_articles["index"]] == 'null':  # 可能因为直接刷新页面导致直接去查询了'null',因此当刷新的页面的时候,需要直接进行“上一篇”操作 | ||||
|             visited_articles["index"] -= 1 | ||||
|             visited_articles["article_ids"].pop() | ||||
|         rq.instructions('SELECT * FROM article WHERE article_id=%d' % (visited_articles["article_ids"][visited_articles["index"]])) | ||||
|     rq.do() | ||||
|     result = rq.get_results() | ||||
|         article_id = visited_articles["article_ids"][visited_articles["index"]] | ||||
|         result = get_article_by_id(article_id) | ||||
|     random.shuffle(result) | ||||
| 
 | ||||
|     # Choose article according to reader's level | ||||
|  |  | |||
|  | @ -1,7 +1,6 @@ | |||
| import hashlib | ||||
| import string | ||||
| from datetime import datetime, timedelta | ||||
| from UseSqlite import InsertQuery, RecordQuery | ||||
| 
 | ||||
| def md5(s): | ||||
|     ''' | ||||
|  |  | |||
|  | @ -1,87 +0,0 @@ | |||
| ########################################################################### | ||||
| # Copyright 2019 (C) Hui Lan <hui.lan@cantab.net> | ||||
| # Written permission must be obtained from the author for commercial uses. | ||||
| ########################################################################### | ||||
| 
 | ||||
| 
 | ||||
| # Reference: Dusty Phillips.  Python 3 Objected-oriented Programming Second Edition. Pages 326-328. | ||||
| # Copyright (C) 2019 Hui Lan | ||||
| 
 | ||||
| import sqlite3 | ||||
| 
 | ||||
| class Sqlite3Template: | ||||
|     def __init__(self, db_fname): | ||||
|         self.db_fname = db_fname | ||||
| 
 | ||||
|     def connect(self, db_fname): | ||||
|         self.conn = sqlite3.connect(self.db_fname) | ||||
| 
 | ||||
|     def instructions(self, query_statement): | ||||
|         raise NotImplementedError() | ||||
| 
 | ||||
|     def operate(self): | ||||
|         self.conn.row_factory = sqlite3.Row | ||||
|         self.results = self.conn.execute(self.query) # self.query is to be given in the child classes | ||||
|         self.conn.commit() | ||||
| 
 | ||||
|     def format_results(self): | ||||
|         raise NotImplementedError() | ||||
| 
 | ||||
|     def do(self): | ||||
|         self.connect(self.db_fname) | ||||
|         self.instructions(self.query) | ||||
|         self.operate() | ||||
| 
 | ||||
|     def instructions_with_parameters(self, query_statement, parameters): | ||||
|         self.query = query_statement | ||||
|         self.parameters = parameters | ||||
| 
 | ||||
|     def do_with_parameters(self): | ||||
|         self.connect(self.db_fname) | ||||
|         self.instructions_with_parameters(self.query, self.parameters) | ||||
|         self.operate_with_parameters() | ||||
| 
 | ||||
|     def operate_with_parameters(self): | ||||
|         self.conn.row_factory = sqlite3.Row | ||||
|         self.results = self.conn.execute(self.query, self.parameters) # self.query is to be given in the child classes | ||||
|         self.conn.commit() | ||||
| 
 | ||||
| 
 | ||||
| class InsertQuery(Sqlite3Template): | ||||
|     def instructions(self, query): | ||||
|         self.query = query | ||||
| 
 | ||||
| 
 | ||||
| class RecordQuery(Sqlite3Template): | ||||
|     def instructions(self, query): | ||||
|         self.query = query | ||||
| 
 | ||||
|     def format_results(self): | ||||
|         output = [] | ||||
|         for row_dict in self.results.fetchall(): | ||||
|             lst = [] | ||||
|             for k in dict(row_dict): | ||||
|                 lst.append( row_dict[k] ) | ||||
|             output.append(', '.join(lst)) | ||||
|         return '\n\n'.join(output) | ||||
| 
 | ||||
|     def get_results(self): | ||||
|         result = [] | ||||
|         for row_dict in self.results.fetchall(): | ||||
|             result.append( dict(row_dict) ) | ||||
|         return result | ||||
| 
 | ||||
| 
 | ||||
| 
 | ||||
| if __name__ == '__main__': | ||||
| 
 | ||||
|     #iq = InsertQuery('RiskDB.db') | ||||
|     #iq.instructions("INSERT INTO inspection Values ('FoodSupplies', 'RI2019051301', '2019-05-13', '{}')") | ||||
|     #iq.do() | ||||
|     #iq.instructions("INSERT INTO inspection Values ('CarSupplies', 'RI2019051302', '2019-05-13', '{[{\"risk_name\":\"elevator\"}]}')") | ||||
|     #iq.do() | ||||
| 
 | ||||
|     rq = RecordQuery('wordfreqapp.db') | ||||
|     rq.instructions("SELECT * FROM article WHERE level=3") | ||||
|     rq.do() | ||||
|     #print(rq.format_results()) | ||||
|  | @ -32,3 +32,17 @@ def get_page_articles(num, size): | |||
|             x | ||||
|             for x in Article.select().order_by(desc(Article.article_id)).page(num, size) | ||||
|         ] | ||||
| 
 | ||||
| 
 | ||||
| def get_all_articles(): | ||||
|     articles = [] | ||||
|     with db_session: | ||||
|         for article in Article.select(): | ||||
|             articles.append(article.to_dict()) | ||||
|     return articles | ||||
| 
 | ||||
| 
 | ||||
| def get_article_by_id(article_id): | ||||
|     with db_session: | ||||
|         article = Article.get(article_id=article_id) | ||||
|     return [article.to_dict()] | ||||
|  |  | |||
		Loading…
	
		Reference in New Issue