python操作sqlite数据库

root@cacti:~/box# cat convert.py
#!/usr/bin/env python


import sqlite3,time,rrdtool,os

def boxstatus():
  '''
  check the status of the box, and set it to 1 if it is online,
  set it to 0 if it is offline
  '''
  
  
  if "status.db":
     os.system('rm status.db')
  dcon = sqlite3.connect("status.db")
  dcon.execute("create table if not exists status(id ,value)")
  
  scon = sqlite3.connect("sdZ1")
  scur = scon.cursor()
  scur.execute("select count(*) from name")
  (counts,) = scur.fetchone()
  
  scur.execute("select id,time from name")
  pynow = time.time()
  while counts: 
     (pyid, pytime) = scur.fetchone()
     if pynow - pytime > 60:
        status = 0
     elif pynow - pytime <= 60:
        status = 1
     counts -= 1
     dcon.execute("insert into status (id, value) values ( ?, ?)", (pyid, status)) 
     dcon.commit()
  dcon.close()
  scur.close()
  scon.close()

if __name__ == "__main__":
   boxstatus()

 这个脚本从逻辑或者从细节上都不是一个好脚本,不过能说明一些python操作sqlite的用法。

官方参考:

http://docs.python.org/2/library/sqlite3.html#sqlite3-controlling-transactions

说一些对我来说比较不容易理解的地方:

1.cursor游标(摘引自:http://anony3721.blog.163.com/blog/static/5119742010716104442536/

游标提供了一种对从表中检索出的数据进行操作的灵活手段,就本质而言,游标实际上是一种能从包括多条数据记录的结果集中每次提取一条记录的机制。游标总是与一条SQL  选择语句相关联。因为游标由结果集(可以是零条、一条或由相关的选择语句检索出的多条记录)和结果集中指向特定记录的游标位置组成。当决定对结果集进行处理时,必须声明一个指向该结果集的游标。如果曾经用 C 语言写过对文件进行处理的程序,那么游标就像您打开文件所得到的文件句柄一样,只要文件打开成功, 该文件句柄就可代表该文件。对于游标而言,其道理是相同的。可见游标能够实现按与传统程序读取平面文件类似的方式处理来自基础表的结果集,从而把表中数据以平面文件的形式呈现给程序。
        我们知道关系数据库管理系统实质是面向集合的,在Sqlite中并没有一种描述表中单一记录的表达形式,除非使用where  子句来限制只有一条记录被选中。因此我们必须借助于游标来进行面向单条记录的数据处理。由此可见,游标允许应用程序对查询语句select  返回的行结果集中每一行进行相同或不同的操作,而不是一次对整个结果集进行同一种操作;它还提供对基于游标位置而对表中数据进行删除或更新的能力;正是游标把作为面向集合的数据库管理系统和面向行的程序设计两者联系起来,使两个数据处理方式能够进行沟通。

 

2.

posted @ 2013-12-04 14:41  silence.li  阅读(417)  评论(0编辑  收藏  举报