第十三章:数据库操作、测试
以sqlite小型嵌入式数据库为例来讲解,要下载sqlite.exe文件,把它当做模块导入,然后在进行连接等;内容比较简单主要分为两点:
1.建立表
首先要建立连接
>>import sys
>>sys.path.append("E:\\sqlite")
>>import sqlite3
>>conn=sqlite3.connect("foot.db") #建立连接
>>cus=conn.cursor() #获取游标,游标用来执行语句和获取结果
>>for line in open("E:\\sqlite\\src/1.txt"):
fields=line.split("^")
vals=[conver(f) for f in fields[:field_count]]
cus.execute(query,vals) #插入数据
>>cus.execute('''
CREATE TABLE food(
id TEXT PRIMARY KEY,
desc TEXT,
water FLOAT
)
''') ##建表
>>conn.commit()
>>conn.close()
2.查询操作
>>query2='SELECT * FROM food'
>>cus.execute(query2)
>>names=[for[0] for f in cus.description]
>>for row in cus.fetchall():
for f in zip(nams,row):
print(f)
测试:
1.测试的四步
指出需要的新特性,记录下来,然后编写一个测试
编写特性的概要代码,这样程序就可以运行而没有任何语法等方面的错误,但是测试会失败,在试图让测试成功前,要看到测试的失败。
为特性的概要编写虚设代码,能满足测试要求就行,不用准确的实现功能,只要保证测试通过就可以。
重写代码。
2.测试工具
标准库中的模块可以助我们一臂之力:
通用测试框架:unitest
简单的一些模块,用于检查文档:doctest
3.doctest
def square(x):
'''
square
'''
return x*x
if __name__=='__main__':
import doctest.doctext
doctest.testmod(doctext)
在上述实例中,doctest.testmod()函数从一个模块读取所有文档字符串,找出所有看起来像是在交互式解释器中输入例子的文本,之后检查例子是否符合要求。
4.unitest
是一种基于java的流行测试框架,灵活强大。
import unittest,sys
sys.path.append("E:\\python\\python")
import my_math
class produ(unittest.TestCase):
def testIntegers(self):
for x in xrange(-10,10):
for y in xrange(-10,10):
p=my_math.product(x,y)
self.failUnless(p=x*y,'failed!!!!!')
def testFloats(self):
for x in xrange(-10,10):
for y in xrange(-10,10):
x=x/10.0
y=y/10.0
p=my_math.product(x,y)
self.failUnless(p=x*y,"float failed")
if __name__=='__main__':unittest.main()
在上例中,unittest.main会实例化所有TestCase的子类,运行所有名字以test开头的方法
还有更多关于它的方法请看附件;
5.分析
调用模块
>>import profile
>>from my_math import product
>>profile.run(‘product(1,2)’)
最后打印的将会是函数运行花费的时间
>>import pstats
>>p=pstats.Stats(‘’)
将结果保存到文件中,调用Stats对象以编程的方式检查结果
另外还有timeit模块测定小代码段的运行时间。
<!--EndFragment-->