python之数据库操作(sqlite)

不像常见的客户端/服务器结构范例,SQLite引擎不是个程序与之通信的独立进程,而是连接到程序中成为它的一个主要部分。所以主要的通信协议是在编程语言内的直接API调用。这在消耗总量、延迟时间和整体简单性上有积极的作用。整个数据库(定义、表、索引和数据本身)都在宿主主机上存储在一个单一的文件中。相比其它大型数据库来说,确实有些差距。但是包括事务(transaction),就是代表原子性、一致性、隔离性和持久性的(ACID),触发器(trigger)和多数的复杂查询都是支持的。另外,在于语言上绑定也是十分出色:包含了PHP,python,c/c++等等。

更多信息请参看:http://zh.wikipedia.org/wiki/SQLite

在python使用SQLite3

(以下信息摘至:http://anony3721.blog.163.com/blog/static/5119742010716104442536/

python的数据库模块有统一的接口标准,所以数据库操作都有统一的模式,基本 上都是下面几步(假设数据库模块名为db):

1. 用db.connect创建数据库连接,假设连接对象为conn

2.
如果该数据库操作不需要返回结果,就直接用conn.execute查询,根据数据库事务隔离级别的不同,

可能修改数据库需要conn.commit

3.
如果需要返回查询结果则用conn.cursor创建游标对象cur,
通过cur.execute查询数据库,

用cur.fetchall/cur.fetchone/cur.fetchmany返回查询结果。根据数据库事
务隔离级别的不同,

可能修改数据库需要conn.commit
4.
关闭cur,close()

一,Python
SQLITE数据库导入模块:

import sqlite3

二,创建数据库/打开数据库:

cx =
sqlite3.connect("E:/test.db")
其实我们不需要显式的创建一个sqlite数据库,在调用connect函数的时候,指定库名称,如果指定的数据库存在就直接打开这个数据库,如果不存在
就新创建一个再打开。这一点应用很好理解。

三,数据库连接对象:

打开数据库时返回的对象cx就是一个数据库连接对象,它可以有以下操作:

commit()--事务提交  
rollback()--事务回滚  
close()--关闭一个数据库连接  
cursor()--创建一个游标

四,Python
SQLITE数据库游标的使用:

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

下面着重阐述cursor游标的使用。其实,所有sql语句的执行都 要在游标对象下进行。

首先,定义一个游标:

cu = cx.cursor()
这样定义了一个游标。游标对象有以下的操作:

execute()--执行sql语句  
executemany--执行多条sql语句  
close()--关闭游标  
fetchone()--从结果中取一条记录,并将游标指向下一条记录  
fetchmany()--从结果中取多条记录  
fetchall()--从结果中取出所有记录  
scroll()--游标滚动 下面就使用Python
SQLITE数据库中游标对我们上面建立的数据库作一些操作吧:

1,建表:
cu.execute('create table catalog (id integer primary key,pid
integer,name varchar(10) UNIQUE)')
上面语句创建了一个叫catalog的表,它有一个主键id,一个pid,和一个name,name是不可以重复的。

2,插入数据:
cu.execute("insert into catalog values(0, 0,
'name1')")  cu.execute("insert into catalog
values(1, 0, 'hello')")
简单的插入两行数据,不过需要提醒的是,只有提交了之后,才能生效.我们使用数据库连接对象cx来进行提交commit和回滚rollback操作.

cx.commit()

3,查询:
cu.execute("select * from catalog")
要提取查询到的数据,使用游标的fetch***函数,如:
print cu.fetchall() 返回结果如下:
[(0, 0, u'name1'), (1, 0, u'hello')]
如果我们使用cu.fetchone(),则首先返回列表中的第一项,再次使用,则返回第二项,依次下去.

4,修改:
cu.execute("update catalog set name='name2' where id =
0")

cx.commit()
注意,修改数据以后提交

5,删除:
cu.execute("delete from catalog where id = 1") 
cx.commit() 以上简单的操作反应的Python
SQLITE数据库操作的基本要点,这里点到为止.然后,SQLite的强大,并不仅限于此,其对SQL高级特性的支持及其小巧灵活的特点,使得
SQLite在众多领域受到开发者的青睐.

举例:

 Exemplary
exemplar 1

import
sqlite3

con =
sqlite3.connect('d:/mydatabase.db3')
cur =
con.cursor()
cur.execute('CREATE TABLE
foo (o_id INTEGER PRIMARY KEY, fruit VARCHAR(20), veges
VARCHAR(30))')
con.commit()
cur.execute('INSERT INTO
foo (o_id, fruit, veges) VALUES(NULL, "apple",
"broccoli")')
con.commit()
print
cur.lastrowid

cur.execute('SELECT *
FROM foo')
print
cur.fetchall()

  Exemplary
exemplar 2

#-*-
encoding:gb2312 -*-
import sqlite3

conn =
sqlite3.connect("D:/aaa.db")
conn.isolation_level = None
#这个就是事务隔离级别,默认是需要自己commit才能修改数据库,置为None则自动每次修改都提交,否则为""
# 下面就是创建一个表
conn.execute("create table if not exists t1(id integer primary key
autoincrement, name varchar(128), info varchar(128))")
# 插入数据
conn.execute("insert into t1(name,info) values ('zhaowei', 'only a
test')")
# 如果隔离级别不是自动提交就需要手动执行commit
conn.commit()
# 获取到游标对象
cur = conn.cursor()
# 用游标来查询就可以获取到结果
cur.execute("select * from t1")
# 获取所有结果
res = cur.fetchall()
print 'row:', cur.rowcount
# cur.description是对这个表结构的描述
print 'desc', cur.description
# 用fetchall返回的结果是一个二维的列表
for line in res:
    for f in
line:
       
print f,
    print
print '-'*60

cur.execute("select *
from t1")
# 这次查询后只取一个结果,就是一维列表
res = cur.fetchone()
print 'row:', cur.rowcount
for f in res:
    print
f,
print
# 再取一行
res = cur.fetchone()
print 'row:', cur.rowcount
for f in res:
    print
f,
print
print '-'*60

cur.close()
conn.close()

python之数据库操作(sqlite)的更多相关文章

  1. python sqlite3 数据库操作

    python sqlite3 数据库操作 SQLite3是python的内置模块,是一款非常小巧的嵌入式开源数据库软件. 1. 导入Python SQLite数据库模块 import sqlite3 ...

  2. python之数据库操作

    数据库操作 Python 操作 Mysql 模块的安装 1 2 3 4 5 linux:     yum install MySQL-python   window:     http://files ...

  3. iOS学习笔记(十五)——数据库操作(SQLite)

    SQLite (http://www.sqlite.org/docs.html) 是一个轻量级的关系数据库.SQLite最初的设计目标是用于嵌入式系统,它占用资源非常少,在嵌入式设备中,只需要几百K的 ...

  4. Python的数据库操作(Sqlalchemy)

    ORM 全称 Object Relational Mapping, 翻译过来叫对象关系映射.简单的说,ORM 将数据库中的表与面向对象语言中的类建立了一种对应关系.这样,我们要操作数据库,数据库中的表 ...

  5. 【转】iOS学习笔记(十五)——数据库操作(SQLite)

    SQLite (http://www.sqlite.org/docs.html) 是一个轻量级的关系数据库.SQLite最初的设计目标是用于嵌入式系统,它占用资源非常少,在嵌入式设备中,只需要几百K的 ...

  6. 10分钟教你Python+MySQL数据库操作

    欲直接下载代码文件,关注我们的公众号哦!查看历史消息即可! 本文介绍如何利用python来对MySQL数据库进行操作,本文将主要从以下几个方面展开介绍: 1.数据库介绍 2.MySQL数据库安装和设置 ...

  7. [Python]MySQLdb for Python使用指南/Python的数据库操作

    网站就是要和数据库进行交互,否则什么都不用做了...今天我们来看一个叫MySQLdb的库,这个用来和MySQL数据库进行交互.可以从这里获得这个库http://sourceforge.net/proj ...

  8. Python的数据库操作(pymysql)

    使用原生SQL语句进行对数据库操作,可完成数据库表的建立和删除,及数据表内容的增删改查操作等.其可操作性很强,如可以直接使用“show databases”.“show tables”等语句进行表格之 ...

  9. Python的数据库操作

    使用原生SQL语句进行对数据库操作,可完成数据库表的建立和删除,及数据表内容的增删改查操作等.其可操作性很强,如可以直接使用“show databases”.“show tables”等语句进行表格之 ...

随机推荐

  1. Agile methodology

    ntroduction Waterfall model follows application development in phases with checkpoint and deliverabl ...

  2. 定制一个winCE5.0操作系统

    定制一个winCE5.0操作系统 2009-04-01 09:01:14|  分类: winCE|字号 订阅     定制一个操作系统并模拟器上运行,需要以下几个步骤: STEP 1:用Platfor ...

  3. BestCoder Round #50 (div.1) 1003 The mook jong (HDU OJ 5366) 规律递推

    题目:Click here 题意:bestcoder 上面有中文题目 分析:令f[i]为最后一个木人桩摆放在i位置的方案,令s[i]为f[i]的前缀和.很容易就能想到f[i]=s[i-3]+1,s[i ...

  4. OC-多线程GCD的使用细节

    1>GCD,全称Grand Central Dispatch,”牛逼的中枢调度器”,纯C语言,提供了非常多强大的函数2>GCD优势:(1)GCD是苹果公司为多核的并行运算提出的解决方案(2 ...

  5. BZOJ 1978: [BeiJing2010]取数游戏 game( dp )

    dp(x)表示前x个的最大值,  Max(x)表示含有因数x的dp最大值. 然后对第x个数a[x], 分解质因数然后dp(x) = max{Max(t)} + 1, t是x的因数且t>=L -- ...

  6. 我的Python成长之路---第三天---Python基础(9)---2016年1月16日(雾霾)

    一.集合 set和dict类似,也是一组key的集合,但不存储value.由于key不能重复,所以,在set中,没有重复的key. 集合和我们数学中集合的概念是一样的,也有交集,并集,差集,对称差集等 ...

  7. Oracle中奇怪的【不等于号】

    Oracle中奇怪的[不等于号]   在Oracle中,不等号有三种:<>,!=,^= 例如: select * from test where name<>'xn'.返回的结 ...

  8. ASP.NET MVC 5 学习教程:控制器传递数据给视图

    原文 ASP.NET MVC 5 学习教程:控制器传递数据给视图 起飞网 ASP.NET MVC 5 学习教程目录: 添加控制器 添加视图 修改视图和布局页 控制器传递数据给视图 添加模型 创建连接字 ...

  9. 由于物化视图定义为on commit导致update更新基表慢的解决方案

    由于物化视图定义为on commit导致update更新基表慢的解决方案 以下是模拟和解决测试过程: (模拟update慢的过程) 1.首先基于基表创建物化视图日志: create materiali ...

  10. PopupWindow的使用以及ArrayAdatper.notifyDataSetChanged()无效详解

    Android的对话框有两种:PopupWindow和AlertDialog.它们的不同点在于: AlertDialog的位置固定,而PopupWindow的位置可以随意 AlertDialog是非阻 ...