【原创】shadowebdict开发日记:基于linux的简明英汉字典(四)
全系列目录:
- 【原创】shadowebdict开发日记:基于linux的简明英汉字典(一)
- 【原创】shadowebdict开发日记:基于linux的简明英汉字典(二)
- 【原创】shadowebdict开发日记:基于linux的简明英汉字典(三)
- 【原创】shadowebdict开发日记:基于linux的简明英汉字典(四)
- 项目的github地址
实习的工作都这么忙,真是的。。
好不容易有时间写点博客,一鼓作气完成算了
承接上文
本文完成对本地数据库模块的开发。
由于只是非常轻量级的应用,就不劳mysql大驾了,来个sqlite就可以了,本地db文件也好读取。
这里我们可以多实现一个功能:难词系统。
定义一个难词为查询多次达到某个阀值的词,并记录本地数据库中所有词汇的查询次数。
当有词语达到这个标准时,将该词添加到本地数据库中的难词表,并提供一个方法供其他模块查询难词表。
可以看出,难词系统决定了本地数据模块这个部分和response模块不同,需要提供多个模块供上层操作,包括:
0、提供查询难词表的接口。
1、提供更新每个词汇查询次数的接口。
2、提供插入词汇的接口。
3、和response模块一样,给定一个词汇,查询其含义的接口。
具体代码如下:
# -*- coding:utf-8 -*-
__author__ = 'wmydx' import sqlite3 class LocalDict:
def __init__(self):
self.con = None
self.limit = 4
self.setup_connect() def setup_connect(self):
self.con = sqlite3.connect('./word.db')
create_table = '''CREATE TABLE IF NOT EXISTS words
(
word text,
explain text,
net_explain text,
sentence text,
times int
);
'''
self.con.execute(create_table)
create_table = '''CREATE TABLE IF NOT EXISTS hard
(
word text,
explain text,
net_explain text,
sentence text,
times int
);
'''
self.con.execute(create_table)
self.con.text_factory = str def is_a_hard_word(self, diction):
print diction['times'] == self.limit
return diction['times'] == self.limit # prevent mutiple insert, so use == instead of >= def update_word_times(self, diction):
curs = self.con.cursor()
update_sql = '''
UPDATE words SET times=? WHERE word=?
'''
curs.execute(update_sql,(diction['times'], diction['word'])) def get_hard_word(self):
curs = self.con.cursor()
select_sql = '''
SELECT word FROM hard;
'''
curs.execute(select_sql)
names = [d[0] for d in curs.description]
rows = [dict(zip(names, row)) for row in curs.fetchall()]
return rows def get_eng_word_from_db(self, word):
curs = self.con.cursor()
select_sql = '''
SELECT * FROM words WHERE word=\'%s\';
''' % word
curs.execute(select_sql)
names = [d[0] for d in curs.description]
rows = [dict(zip(names, row)) for row in curs.fetchall()]
return rows def process_dict(self, diction):
for key in diction.keys():
if diction[key] == -1:
diction[key] = ''
return diction # before pass diction to this method, u need to add word and times in diction
def insert_word_to_db(self, diction, table):
diction = self.process_dict(diction)
insert_sql = '''
INSERT INTO %s (word,explain,net_explain,sentence,times) VALUES
(?,?,?,?,?);
''' % table
self.con.execute(insert_sql, (diction['word'], diction['explain'],
diction['net_explain'], diction['sentence'], diction['times'])) def turn_off_db(self):
self.con.commit()
self.con.close() if __name__ == '__main__':
db = LocalDict()
db.setup_connect()
到此为止,我们开发了一个完整的webdict,平常看英文原著的时候,快捷命令一打就随手查吧
免得开浏览器然后。。。=_+
【原创】shadowebdict开发日记:基于linux的简明英汉字典(四)的更多相关文章
- 【原创】shadowebdict开发日记:基于linux的简明英汉字典(三)
全系列目录: [原创]shadowebdict开发日记:基于linux的简明英汉字典(一) [原创]shadowebdict开发日记:基于linux的简明英汉字典(二) [原创]shadowebdic ...
- 【原创】shadowebdict开发日记:基于linux的简明英汉字典(二)
全系列目录: [原创]shadowebdict开发日记:基于linux的简明英汉字典(一) [原创]shadowebdict开发日记:基于linux的简明英汉字典(二) [原创]shadowebdic ...
- 【原创】shadowebdict开发日记:基于linux的简明英汉字典(一)
全系列目录: [原创]shadowebdict开发日记:基于linux的简明英汉字典(一) [原创]shadowebdict开发日记:基于linux的简明英汉字典(二) [原创]shadowebdic ...
- Go 语言开发的基于 Linux 虚拟服务器的负载平衡平台 Seesaw
负载均衡系统 Seesaw Seesaw是由我们网络可靠性工程师用 Go 语言开发的基于 Linux 虚拟服务器的负载平衡平台,就像所有好的项目一样,这个项目也是为了解决实际问题而产生的. Seesa ...
- 构建一个基本的前端自动化开发环境 —— 基于 Gulp 的前端集成解决方案(四)
通过前面几节的准备工作,对于 npm / node / gulp 应该已经有了基本的认识,本节主要介绍如何构建一个基本的前端自动化开发环境. 下面将逐步构建一个可以自动编译 sass 文件.压缩 ja ...
- 嵌入式Linux驱动开发日记
嵌入式Linux驱动开发日记 主机硬件环境 开发机:虚拟机Ubuntu12.04 内存: 1G 硬盘:80GB 目标板硬件环境 CPU: SP5V210 (开发板:QT210) SDRAM: 512M ...
- 用VSCode开发一个基于asp.net core 2.0/sql server linux(docker)/ng5/bs4的项目(1)
最近使用vscode比较多. 学习了一下如何在mac上使用vscode开发asp.netcore项目. 这里是我写的关于vscode的一篇文章: https://www.cnblogs.com/cgz ...
- Linux系统启动那些事—基于Linux 3.10内核【转】
转自:https://blog.csdn.net/shichaog/article/details/40218763 Linux系统启动那些事—基于Linux 3.10内核 csdn 我的空间的下载地 ...
- 轻易实现基于linux或win运行的聊天服务端程序
对于不了解网络编程的开发人员来说,编写一个良好的服务端通讯程序是一件比较麻烦的事情.然而通过EC这个免费组件你可以非常简单地构建一个基于linux或win部署运行的网络服务程序.这种便利性完全得益于m ...
随机推荐
- 更好的自动ssh登录
更好的自动ssh登录 解决~/.ssh/known_hosts 过期问题. bash + expect bash:ssh.sh #!/bin/bash help(){ echo "usage ...
- bootstrap css选择不同的宽度
刚开始使用bootstrap css开源项目.遇到一个问题,默认的input 宽度太大,需要找小一点的. 其实只需要在input tag中选用预定义的较小的宽度即可.比如: <input typ ...
- iOS_10_tableView的简单使用_红楼十二钗
终于效果图: 方式1,用字典数组 BeyondViewController.h // // BeyondViewController.h // 10_tableView // // Created b ...
- hdu 1240 Asteroids!(BFS)
题目链接:点击链接 简单BFS,和二维的做法相同(需注意坐标) 题目大意:三维的空间里,给出起点和终点,“O”表示能走,“X”表示不能走,计算最少的步数 #include <iostream&g ...
- block存储区域——怎样验证block在栈上,还是堆上
Block存储区域 首先,须要引入三个名词: ● _NSConcretStackBlock ● _NSConcretGlobalBlock ● _NSConcretMallocBlock 正如它们名字 ...
- jQuery拖动调整表格列宽度-resizableColumns
实现鼠标可拖动调整表格列宽度 如图: 一.引入文件: <script src="/js/jquery-1.8.0.min.js" type="text/javasc ...
- SE 2014年4月1日
一. 描述OSPF报文都有哪些,其作用? OSPF报文主要有:hello报文.DD报文.LSR报文.LSU报文和LSAck报文. Hello报文主要用来建立和维护邻居关系. DD报文是链路状态数据库的 ...
- vs2008+opencv2.4.9 +win7X64位系统 2.
小编用自身血淋淋的例子,来给大家做个参考,共耗时近2天时间,终于屈服于安装vs2010,然后配置成功了.但是在这个配置成功后,我终于发现了我08配置不成功的原因,写下心得,供各位参考 1.准备工具 v ...
- python面向对象的继承
无话可说,继承主要是一些父类继承,代码是非常具体的 #!/usr/bin/env python #coding:utf-8 class Father(object):#新式类 def __init__ ...
- C#之任务,线程和同步
1 概述 对于所有需要等待 的操作,例 如 ,因 为文件 . 数据库或网络访 问都需要一定 的时间,此 时就可以启 动一个新线程,同时完成其他任务,即使是处理密集型的任务,线程也是有帮助的. 2 Pa ...