[Python]_[初级]_[校验查询sqlite3数据库]

场景

  1. sqlite3数据库是我们开发程序时常用来存储数据的数据库,如果发布产品时我们需要一些初始化数据才能正常运行产品,那么这个数据库测试组如何进行校验是否正确呢?

说明

  1. sqlite3的提供了C语言的动态库进行操作,但是测试组并不都会使用C语言开发测试程序的,而且使用C开发的程序还需要进行编译链接运行,比较慢,这会影响测试编写测试脚本的效率。

  2. 测试一般使用是Python作为自动化测试语言,Python3其实也集成了sqlite3库作为标准模块进行了发布,我们可以直接使用import sqlite3就可以引用发布,并通过参考Python sqlite3 API进行操作。

  3. 吐槽下PythonAPI还是看不习惯,应该说不够标准。类似于JavaC/C++的都对每个参数进行解析,之后还对返回值进行说明,比如以下的看就比较明确。Python的却是分段落,每个段落要仔细看内容才能知道讲的什么参数或返回值,有时候返回值并不是最后一行说明,可能穿插在某一个段落里,不小心就错过了。这是我不喜欢用Python的原因之一,看API十分费劲。

para1: xxx
para2: xxx

return: xxx

例子

  1. 以下例子通过打开数据库并统计所有表的行数来确认数据库是否有损坏。当然如果知道校验规则,也可以对数据进行检查。
import sqlite3
from sqlite3.dbapi2 import OperationalError
import sys

# SQLite natively supports only the types TEXT, INTEGER, REAL, 
# BLOB and NULL
def checkDb(dbPath):
    # 'file:path/to/database?mode=ro'
    con = None
    try:
        con = sqlite3.connect('file:'+dbPath+'?mode=ro', uri=True)
    except OperationalError as identifier:
        print("Db Path Invalid %s" % (dbPath))
        return
   
    cur = con.cursor()

    sqlTables = "SELECT name FROM sqlite_master where type='table'"
    # 1. 使用Row对象,逐行获取.
    print("============================")
    cur.execute(sqlTables)
    oneRow = cur.fetchone()
    array1 = []
    while(oneRow != None):
        print(oneRow[0])
        array1.append(oneRow[0])
        oneRow = cur.fetchone()

    print("============================")
    # 2. 一次过获取所有行.
    cur.execute(sqlTables)
    for one in cur.fetchall():
        print(one[0])

    print("============================")
    # 3. 统计每个表的行数.
    for one in array1:
        t = (one,)
        cur.execute("SELECT COUNT(1) FROM "+one)
        print("%s(%d) " % (one,cur.fetchone()[0]))
    
    cur.close()

if __name__ == "__main__":
    checkDb(sys.argv[1])
    pass

输出

运行方式: DbChecker.py xxx.db

============================
contact
sms
photo
video
music
book
app
info
============================
contact
sms
photo
video
music
book
app
info
============================
contact(1)
sms(1)
photo(0)
video(0)
music(0)
book(0)
app(0)
info(1)

参考

SQLite URI documentation

Python sqlite3 API

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Peter(阿斯拉达)

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值