您的位置:首页 > 编程语言 > Python开发

10、Python-数据库支持

2013-06-15 20:28 477 查看
使用数据库的好处:

a、支持数据的并发访问,多个用户同时对基于磁盘的数据进行读写而不造成任何文件的损坏;

b、支持根据多个数据字段或属性进行复杂的搜索;

1、如何操作数据库,API

数据库的种类有很多,并且它们的功能基本都是一样的,为了对数据库进行统一的操作,大多数语言都提供了简单的、标准化的数据库接口(API)。为了易于编写跨数据库的程序,所有数据库的包装模块都应当遵循这个接口。

2、支持的API函数

连接数据库connect(),该函数返回连接对象,代表了与要连接的数据库的会话。连接对象支持一下方法:

close() 关闭连接之后,连接对象和它的游标均不可用
commit()如果支持的话提交挂起的事务,否则不做任何事
rollback()回滚挂起的事务
cursor()返回连接的游标对象(通过游标对象执行SQL查询并检查结果,结果行可以一个一个地获得,也可以很多个一起获得)
游标对象的方法:

callproc(name[,params])使用给定的名称和参数(可选)调用已命名的数据库程序
close()关闭游标之后,游标不可用
execute(oper[,params])执行SQL参数,可能使用参数
executemany(opr, pseq)对序列中的每个参数执行SQL操作
fetchone()把查询的结果集中的下一行保存为序列,或者None
fetchmany([size])获取查询结果集中的多行,默认尺寸为arraysize
fetchall()以序列的形式获取结果集中的所有行
nextset()跳至下一个可用的结果集(可选)
setinputsizes(sizes)为参数预先定义内存区域
setoutputsize(size[,col])为获取的大数据值设定缓冲区尺寸
游标对象特性:

description结果列描述的系列,只读
rowcount结果中的行数,只读
arraysizefetchmany中返回的行数,默认为1
       

3、程序示例

以SQLite数据库为例,它是小型的嵌入式SQL数据库,它的python包装叫做PYSQLite。它速度快,易于使用,并且不需要建立单独的服务器。

3.1 创建和填充表

import sqlite

def convert(value):
if value.startswith('~'):
return value.strip('~')
if not value:
value = '0'
return float(value)

conn = sqlite.connect('food.db')
curs = conn.cursor()

curs.execute('''
CREATE TABLE food (
id         TEXT       PRIMARY KEY,
desc       TEXT,
water      FLOAT,
kcal       FLOAT,
protein    FLOAT,
fat        FLOAT,
ash        FLOAT,
carbs      FLOAT,
fiber      FLOAT,
sugar      FLOAT
)
''')

field_count = 10
markers = ', '.join(['%s']*field_count)
query = 'INSERT INTO food VALUES (%s)' % markers

for line in open('ABBREV.txt'):
fields = line.split('^')
vals = [convert(f) for f in fields[:field_count]]
curs.execute(query, vals)

conn.commit()
conn.close()


3.2 搜索和处理结果

import sqlite, sys

conn = sqlite.connect('food.db')
curs = conn.cursor()

query = 'SELECT * FROM food WHERE %s' % sys.argv[1]
print query
curs.execute(query)
names = [f[0] for f in curs.description]
for row incurs.fetchall():
for pair in zip(names, row):
print '%s: %s' % pair
print
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: