[Python] 用Python写成的分析sqlite并以网页展示结果的小工具 (1)

Sqlitechecker已经在去年年底完成了,年后由于需求稍有改动,所以我又动手改了下代码和重新编译成exe可执行文件。现在将一些开发过程记一下。

这个是个小工具,唯一的一个python源文件也才500行左右,但是作为python的初学者,我遇到的问题也不少,但是都一一解决了,大约从2012年的6月左右开始,这前后断断续续花了2~3个月。

先说开发这个工具的初衷:

工作中会生成很多sqlite文件,每个一个sqlite文件带了3个表,用来记录测试结果,在原本的测试流程中,下一步就是要将这些sqlite文件上传到服务器端进行进一步的分析和验证。 由于种种原因,这些sqlite文件可能因为人为原因导致一些错误,也就是错误的记录会存在于sqlite的3个表里。以前的做法是,上传服务器前会人工使用FireFox上的一个插件 - Sqlite Manager 来打开sqlite文件检查,比较繁琐而且正确性也不太能保证。后又由开发小组的同事用java开发了一个可以运行在Linux的检查工具,用来批量检查sqlite文件,用命令行输出检查结果。我个人感觉到很多不方便的地方,开发的同事比较忙没有继续优化该工具,同时我也一直在看Python的教程,于是萌生了写一个Python的检查工具的想法,我希望是可以在普通Win7下运行,再用网页来简洁明了展现结果。

分析需求:

  • 可以连接和打开sqlite文件
  • 可以从sqlite文件中提取出指定table里指定列的数据,并处理和验证
  • 生成网页,用表格的形式记录来展示验证结果,再打开浏览器将网页打开
  • 使用Python 2.7,工具需要在win7下运行

最初的想法就这些了,当时也不知道会遇到哪些问题,需求也是逐渐后来完善的。

思路:

我的开发过程,基本算是摸着石头过河,思路确实是一点点来的。

最开始我想的是Python怎么连接sqlite,怎么获取其中指定列的数据,然后打印出来,只要打印出来是正确的,就可以开展下一步的验证工作。

问题 0: 查询指定目录下的所有文件,得到一个sqlite文件的文件列表

简化后的示范代码

 1   def updateFileList(self, path):
 2     """
 3     Collect all sqlite files and update the list FILELIST_IN_TARGET_DIR
 4     """
 5     global FILELIST_IN_TARGET_DIR
 6     FILELIST_IN_TARGET_DIR = [] # Clear it before updating...
 8     
 9     for root,dirs,files in os.walk(path):
10       for filespath in files:
11         if filespath.endswith('.sqlite'):
12           FILELIST_IN_TARGET_DIR.append(os.path.join(root,filespath))
13     #~ print "Sqlite list is"
14     #~ print FILELIST_IN_TARGET_DIR

这里最开始可以得到一个用户输入,也即代码中的一个变量path,然后对path中的所有文件进行分析,找到所有以.sqlite结尾的文件的路径,把这些路径都appen到列表FILELIST_IN_TARGET_DIR中。这里需要注意的是,每一次开始对FILELIST_IN_TARGET_DIR该列表进行升级,或者说将它从空表变成一个sqlite文件列表前,要硬性地把把它赋值为空,即第6行。而不是想当然的认为程序开始执行后,到这里这个列表就是空的。后期这个地方曾经导致了一个bug,因为后期我加入了wxPython,将程序改成了有GUI界面,导致这个方法要重复使用,由于前期这里没有第6行代码将列表变空,导致GUI程序执行,sqlite文件列表不断累加……

 

问题 1: Python连接Sqlite,并进行SQL查询

简化后的示范代码

1 import sqlite3 as lite
2 
3 con = lite.connect(each_sqlite_path)
4 cur = con.cursor()
5 
6 cur.execute('select distinct script_110 from columnA')
7 script_list = cur.fetchall()
8 
9 print script_list

这里each_sqlite_path是指的具体某一个sqlite文件的路径,这个变量可以是"D:\myFolder\mySqlitefile.sqlite"。cur.execute('select distinct script_110 from columnA')这个语句很有用,后面用到很多,就是向已经连接的sqlite文件进行SQL查询,这里要注意的是要对所执行的这类语句做些优化,才能提高查询效率和减少程序执行时间。然后后面使用cur.fetchall()来获取所有的查询结果,这里还可以用cur.fetchone(),也就是只获取第一条返回的结果。为了方便的检查结果,最后可以把获取到的结果打印出来。

 

posted @ 2013-03-18 16:58  sanshugong22  阅读(887)  评论(0编辑  收藏  举报