网站大量收购独家精品文档,联系QQ:2885784924

Python内存数据库、引擎课案.doc

  1. 1、本文档共8页,可阅读全部内容。
  2. 2、有哪些信誉好的足球投注网站(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
Python内存数据库、引擎课案

Python内存数据库/引擎 1 初探   在平时的开发工作中,我们可能会有这样的需求:我们希望有一个内存数据库或者数据引擎,用比较Pythonic的方式进行数据库的操作(比如说插入和查询)。   举个具体的例子,分别向数据库db中插入两条数据,a=1, b=1 和 a=1, b=2, 然后想查询a=1的数据可能会使用这样的语句db.query(a=1),结果就是返回前面插入的两条数据; 如果想查询a=1, b=2的数据,就使用这样的语句db.query(a=1, b=2),结果就返回前面的第二条数据。   那么是否拥有实现上述需求的现成的第三方库呢?几经查找,发现PyDbLite能够满足这样的需求。其实,PyDbLite和Python自带的SQLite均支持内存数据库模式,只是前者是Pythonic的用法,而后者则是典型的SQL用法。 他们具体的用法是这样的: PyDbLite 复制代码 import pydblite # 使用内存数据库 pydb = pydblite.Base(:memory:) # 创建a,b,c三个字段 pydb.create(a, b, c) # 为字段a,b创建索引 pydb.create_index(a, b) # 插入一条数据 pydb.insert(a=-1, b=0, c=1) # 查询符合特定要求的数据 results = pydb(a=-1, b=0) 复制代码 SQLite 复制代码 import sqlite3 # 使用内存数据库 con = sqlite3.connect(:memory:) # 创建a,b,c三个字段 cur = con.cursor() cur.execute(create table test (a char(256), b char(256), c char(256));) # 为字段a,b创建索引 cur.execute(create index a_index on test(a)) cur.execute(create index b_index on test(b)) # 插入一条数据 cur.execute(insert into test values(?, ?, ?), (-1,0,1)) # 查询符合特定要求的数据 cur.execute(select * from test where a=? and b=?,(-1, 0)) 复制代码 2 pydblite和sqlite的性能   毫无疑问,pydblite的使用方式非常地Pythonic,但是它的效率如何呢?由于我们主要关心的是数据插入和查询速度,所以不妨仅对这两项做一个对比。写一个简单的测试脚本: 复制代码 import time count = 100000 def timeit(func): def wrapper(*args, **kws): t = time.time() func(*args) print time.time() - t, kws[des] return wrapper @timeit def test_insert(mdb, des=): for i in xrange(count): mdb.insert(a=i-1, b=i, c=i+1) @timeit def test_query_object(mdb, des=): for i in xrange(count): c = mdb(a=i-1, b=i) @timeit def test_sqlite_insert(cur, des=): for i in xrange(count): cur.execute(insert into test values(?, ?, ?), (i-1, i, i+1)) @timeit def test_sqlite_query(cur, des=): for i in xrange(count): cur.execute(select * from test where a=? and b=?, (i-1, i)) print -------pydblite-------- import pydblite pydb = pydblite.Base(:memory:) pydb.create(a, b, c) pydb.create_index(a, b) test_insert(pydb, des=insert) test_query_object(pydb, des=query, object cal

文档评论(0)

jiayou10 + 关注
实名认证
内容提供者

该用户很懒,什么也没介绍

版权声明书
用户编号:8133070117000003

1亿VIP精品文档

相关文档