forked from mrlan/EnglishPal
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 WordFreq import WordFreq
|
||||||
from wordfreqCMD import youdao_link, sort_in_descending_order
|
from wordfreqCMD import youdao_link, sort_in_descending_order
|
||||||
from UseSqlite import InsertQuery, RecordQuery
|
|
||||||
import pickle_idea, pickle_idea2
|
import pickle_idea, pickle_idea2
|
||||||
import os
|
import os
|
||||||
import random, glob
|
import random, glob
|
||||||
|
@ -8,6 +7,7 @@ import hashlib
|
||||||
from datetime import datetime
|
from datetime import datetime
|
||||||
from flask import Flask, request, redirect, render_template, url_for, session, abort, flash, get_flashed_messages
|
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 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
|
import logging
|
||||||
|
|
||||||
path_prefix = './'
|
path_prefix = './'
|
||||||
|
@ -15,11 +15,7 @@ db_path_prefix = './db/' # comment this line in deployment
|
||||||
|
|
||||||
|
|
||||||
def total_number_of_essays():
|
def total_number_of_essays():
|
||||||
rq = RecordQuery(db_path_prefix + 'wordfreqapp.db')
|
return get_number_of_articles()
|
||||||
rq.instructions("SELECT * FROM article")
|
|
||||||
rq.do()
|
|
||||||
result = rq.get_results()
|
|
||||||
return len(result)
|
|
||||||
|
|
||||||
|
|
||||||
def get_article_title(s):
|
def get_article_title(s):
|
||||||
|
@ -33,21 +29,19 @@ def get_article_body(s):
|
||||||
|
|
||||||
|
|
||||||
def get_today_article(user_word_list, visited_articles):
|
def get_today_article(user_word_list, visited_articles):
|
||||||
rq = RecordQuery(db_path_prefix + 'wordfreqapp.db')
|
|
||||||
if visited_articles is None:
|
if visited_articles is None:
|
||||||
visited_articles = {
|
visited_articles = {
|
||||||
"index" : 0, # 为 article_ids 的索引
|
"index" : 0, # 为 article_ids 的索引
|
||||||
"article_ids": [] # 之前显示文章的id列表,越后越新
|
"article_ids": [] # 之前显示文章的id列表,越后越新
|
||||||
}
|
}
|
||||||
if visited_articles["index"] > len(visited_articles["article_ids"])-1: # 生成新的文章,因此查找所有的文章
|
if visited_articles["index"] > len(visited_articles["article_ids"])-1: # 生成新的文章,因此查找所有的文章
|
||||||
rq.instructions("SELECT * FROM article")
|
result = get_all_articles()
|
||||||
else: # 生成阅读过的文章,因此查询指定 article_id 的文章
|
else: # 生成阅读过的文章,因此查询指定 article_id 的文章
|
||||||
if visited_articles["article_ids"][visited_articles["index"]] == 'null': # 可能因为直接刷新页面导致直接去查询了'null',因此当刷新的页面的时候,需要直接进行“上一篇”操作
|
if visited_articles["article_ids"][visited_articles["index"]] == 'null': # 可能因为直接刷新页面导致直接去查询了'null',因此当刷新的页面的时候,需要直接进行“上一篇”操作
|
||||||
visited_articles["index"] -= 1
|
visited_articles["index"] -= 1
|
||||||
visited_articles["article_ids"].pop()
|
visited_articles["article_ids"].pop()
|
||||||
rq.instructions('SELECT * FROM article WHERE article_id=%d' % (visited_articles["article_ids"][visited_articles["index"]]))
|
article_id = visited_articles["article_ids"][visited_articles["index"]]
|
||||||
rq.do()
|
result = get_article_by_id(article_id)
|
||||||
result = rq.get_results()
|
|
||||||
random.shuffle(result)
|
random.shuffle(result)
|
||||||
|
|
||||||
# Choose article according to reader's level
|
# Choose article according to reader's level
|
||||||
|
|
|
@ -1,7 +1,6 @@
|
||||||
import hashlib
|
import hashlib
|
||||||
import string
|
import string
|
||||||
from datetime import datetime, timedelta
|
from datetime import datetime, timedelta
|
||||||
from UseSqlite import InsertQuery, RecordQuery
|
|
||||||
|
|
||||||
def md5(s):
|
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
|
x
|
||||||
for x in Article.select().order_by(desc(Article.article_id)).page(num, size)
|
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