全系列目录:

实习的工作都这么忙,真是的。。

好不容易有时间写点博客,一鼓作气完成算了

承接上文

本文完成对本地数据库模块的开发。

由于只是非常轻量级的应用,就不劳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的简明英汉字典(四)的更多相关文章

  1. 【原创】shadowebdict开发日记:基于linux的简明英汉字典(三)

    全系列目录: [原创]shadowebdict开发日记:基于linux的简明英汉字典(一) [原创]shadowebdict开发日记:基于linux的简明英汉字典(二) [原创]shadowebdic ...

  2. 【原创】shadowebdict开发日记:基于linux的简明英汉字典(二)

    全系列目录: [原创]shadowebdict开发日记:基于linux的简明英汉字典(一) [原创]shadowebdict开发日记:基于linux的简明英汉字典(二) [原创]shadowebdic ...

  3. 【原创】shadowebdict开发日记:基于linux的简明英汉字典(一)

    全系列目录: [原创]shadowebdict开发日记:基于linux的简明英汉字典(一) [原创]shadowebdict开发日记:基于linux的简明英汉字典(二) [原创]shadowebdic ...

  4. Go 语言开发的基于 Linux 虚拟服务器的负载平衡平台 Seesaw

    负载均衡系统 Seesaw Seesaw是由我们网络可靠性工程师用 Go 语言开发的基于 Linux 虚拟服务器的负载平衡平台,就像所有好的项目一样,这个项目也是为了解决实际问题而产生的. Seesa ...

  5. 构建一个基本的前端自动化开发环境 —— 基于 Gulp 的前端集成解决方案(四)

    通过前面几节的准备工作,对于 npm / node / gulp 应该已经有了基本的认识,本节主要介绍如何构建一个基本的前端自动化开发环境. 下面将逐步构建一个可以自动编译 sass 文件.压缩 ja ...

  6. 嵌入式Linux驱动开发日记

    嵌入式Linux驱动开发日记 主机硬件环境 开发机:虚拟机Ubuntu12.04 内存: 1G 硬盘:80GB 目标板硬件环境 CPU: SP5V210 (开发板:QT210) SDRAM: 512M ...

  7. 用VSCode开发一个基于asp.net core 2.0/sql server linux(docker)/ng5/bs4的项目(1)

    最近使用vscode比较多. 学习了一下如何在mac上使用vscode开发asp.netcore项目. 这里是我写的关于vscode的一篇文章: https://www.cnblogs.com/cgz ...

  8. Linux系统启动那些事—基于Linux 3.10内核【转】

    转自:https://blog.csdn.net/shichaog/article/details/40218763 Linux系统启动那些事—基于Linux 3.10内核 csdn 我的空间的下载地 ...

  9. 轻易实现基于linux或win运行的聊天服务端程序

    对于不了解网络编程的开发人员来说,编写一个良好的服务端通讯程序是一件比较麻烦的事情.然而通过EC这个免费组件你可以非常简单地构建一个基于linux或win部署运行的网络服务程序.这种便利性完全得益于m ...

随机推荐

  1. 当try和finally里都有return时,会忽略try的return,而使用finally的return

    今天去逛论坛 时发现了一个很有趣的问题: 谁能给我我解释一下这段程序的结果为什么是:2.而不是:3 代码如下: class Test { public int aaa() { int x = 1; t ...

  2. CentOS下yum使用代理的设置

    export后好像没用? 问题描述: CentOS yum时出现“Could not retrieve mirrorlist http://mirrorlist.centos.org/?release ...

  3. Android自己定义控件——3D画廊和图像矩阵

    转载请注明出处:http://blog.csdn.net/allen315410/article/details/39932689 1.3D画廊的实现 我们知道android系统已经为我们提供好了一个 ...

  4. [Windows Phone学习笔记]页面之间传递对象

    在Windows Phone中,页面之间传递参数就类似Web开发中一样,通过QueryString的形式进行传递,但是如果需要传递对象,则无法通过QueryString形式了,其实也可以,把对象序列化 ...

  5. ubuntu 64位下安装wps

    首先,去官网下载wps.地址:http://community.wps.cn/download/ 然后切换到下载文件夹.运行例如以下命令: $ sudo apt-get install ia32-li ...

  6. python之enumerate()函数的探究

    原地址:http://www.newsmth.net/nForum/#!article/Python/95860 最近用到enumerate()函数,于是查了相关的资料.           其中的一 ...

  7. hdu 1063 Exponentiation 大数

    Problem Description Problems involving the computation of exact values of very large magnitude and p ...

  8. SCU 3132(博弈)

    传送门:windy和水星 -- 水星游戏 1 题意:在一张由 n*m 的格子组成的棋盘上放着 k 个骑士每个骑士的位置为(xi,yi),表示第xi行,第yi列骑士如果当前位置为(x,y),一步可以走的 ...

  9. 黑马程序猿_ 利用oc的协议实现代理模式

    先说下代理模式是什么吧 定义: 为其它对象提供一种代理以控制对这个对象的訪问.在某些情况下,一个对象不适合或者不能直接引用还有一个对象 而代理对象能够在client和目标对象之间起到中介的作用. 在看 ...

  10. Android -> 怎样避免Handler引起内存泄露

    很多其它内容,可訪问个人博客www.liangfeizc.com 错误代码 假设在Activiy中通过内部类(Runnable)的方式定义了一个变量runnable, final Runnable r ...