[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

已标记关键词 清除标记
©️2020 CSDN 皮肤主题: 创作都市 设计师:CSDN官方博客 返回首页
实付 9.90元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值