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