• [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(),也就是只获取第一条返回的结果。为了方便的检查结果,最后可以把获取到的结果打印出来。

  • 相关阅读:
    SQL Server 自动备份数据脚本
    数据库还原,System.Data.SqlClient.SqlError: 因为数据库正在使用,所以无法获得对数据库的独占访问权。 (Microsoft.SqlServer.SmoExtended)
    AD 域中给AD 用加登录本地计算的权限
    share point CSOM 客户端模式 创建表 增删改查
    .net 修改AD域中的密码
    ES6——Object.assign() 对象的合并
    nodeJs —— 从零搭建一个koa项目
    nodeJs —— mongoose学习及案例
    nodeJs —— koa 常用中间件
    js计算舍入误差解决办法
  • 原文地址:https://www.cnblogs.com/summer2012/p/2966370.html
Copyright © 2020-2023  润新知