python之数据库支持

13.1.1 全局变量

任何支持2.0版本DB API的数据库模块都必须定义3个描述模块特性的全局变量。这样做的原因时API设计的很灵活,以支持不同的基础机制、避免过多包装,可如果想让程序同时应用于几个数据库,那可是件麻烦事了,因为需要考虑到各种可能出现的状况。

变量名 用途

apilevel 所使用的python DB API版本

threadsafety 模块的线程安全等级

paramstyle 在SQL查询中使用的参数风格

API级别是个字符串常量,提供正在使用的API版本号。

线程安全性等级是个取值范围0~3的整数。0表示线程完全不共享模块,而3表示模块是安全线程安全的。1表示线程本身可以共享模块,但不对连接共享。如果不使用多个线程,那么完全不用担心这个变量。

参数风格表示执行多次类似查询的时候,参数是如何被拼接到SQL查询中的。

13.1.2 异常

为了能尽可能准确的处理错误,API中定义了一些异常类。它们被定义在一种层次结构中,所以可以通过一个except块捕捉多种异常。

13.1.3 连接和游标

为了使用基础数据库系统,首先必须连接到它。这个时候需要使用具有恰当名称的connect函数,该函数有很多参数,而具体使用哪个参数取决于数据库。

connect函数的常用参数

dsn 数据源名称,给出该参数表示数据库依赖

user 用户名

password 用户密码

host 主机名

database 数据库名

connect函数返回连接对象,这个对象表示目前和数据库的会话。

连接对象方法

close() 关闭连接之后,连接对象和它的游标均不可用

commit() 如果支持的话就提交挂起的事务,否则不做任何事

rollback() 回滚挂起的事务(可能不可用)

cursor() 返回连接的游标对象

cursor方法将我们引入另外一个主题:游标对象。通过游标执行sql查询并检查结果。游标比连接支持更多的方法。

13.1.4 类型

数据库对插入到具有某种类型的列中的值有不同的要求,是为了能正确地与基础sql数据库进行交互操作,DB API定义了用于特殊类型和值的构造函数及常量。

13.2.1 入门

这里以SQLite数据库作为示例。

将SQLite作为名为sqlite3的模块导入。之后就可以创建一个到数据库文件的连接----如果文件不存在就会被创建----通过提供一个文件名:

>>>import sqlite3

>>>conn = sqlite3.connect(‘somedatabase.db‘)

之后就能获得连接的游标:

>>>curs = conn.cursor()

这个游标可以用来执行sql查询,完成查询并且做出某些更改后确保已经进行了提交,这样才可以将这些修改真正的保存到文件中:

>>>conn.commit()

可以在每次修改数据库后都进行提交,而不是仅仅在准备关闭时才提交,准备关闭数据库时,使用close方法:

>>>conn.close()

13.2.2 数据库应用程序示例

1.创建和填充表

为了真正地创建数据库表并且向其中插入数据,写个完全独立的一次程序可能是最简单的方案。

下面程序创建了叫做food的表和适当的字段,并且从ABBREV.txt中读取数据。之后分解析,然后通过调用curs.execute执行SQL的INSERT语句将文本字段中的值插入到数据库中。

将数据导入数据库

import sqlite3

def convert(value)

if value.startswith(‘~‘):

return value.strip(‘~‘)

if not value:

value = ‘0‘

return float(value)

conn = sqlite3.connect(‘food.db‘)

curs = conn.cursor()

curs.execute(‘‘‘

CREATE TABLE food (

id TEXT PRIMARY KEY,

desc TEXT,

water FLOAT,

kcal FLOAT,

ash FLOAT,

fiber FLOAT

)

‘‘‘)

query = ‘INSERT INTO food VALUES(?,?,?,?,?,?)‘

for line in open(‘ABBREV.txt‘):

fileds = line.split(‘^‘)

vals = [convert(f) for f in fileds[:filed_count]]

curs.execute(query,vals)

conn.commit()

conn.close()

当运行这个程序时,它会创建一个叫做food.db的新文件,它包含数据库中的所有数据。

2.搜索和处理结果

使用数据库很简单。再说一次,需要创建连接并且获得该链接的游标。使用execute方法执行sql查询,用fetchall等方法提取结果。

展示一个将SQL SELECT条件查询作为命令行参数,之后按记录格式打印出返回行的小程序。可以用下面的命令尝试这个程序:

$python food_query.py "kcal <= 100 AND fiber >= 10 ORDER BY sugar"

运行的时候可能注意到有个问题。第一行,生橘子皮看起来不含任何糖分,这是因为在数据文件中这个字段丢失了。可以改进刚才的导入脚本检测条件,然后插入None带代替真实的值来表示丢失的数据。可以使用如下条件:

"kcal <= 100 AND fiber >= 10 AND sugar ORDER BY sugar"

请求在任何返回行中包含实际数据的糖分字段。

食品数据库查询程序(food_query.py)

import sqlite3,sys

conn = sqlite3.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 in curs.fetchall():

for pair in zip(names,row):

print ‘%s: %s‘ % pair

print

时间: 2024-10-09 08:42:17

python之数据库支持的相关文章

&lt;&lt;Python基础教程&gt;&gt;学习笔记 | 第13章 | 数据库支持

备注:这章内容相对介绍的比较简单,不过例子比较使用,主要是要掌握如果连接,使用数据库,并以SQLite做示例 ------ Python数据库API 为了解决Python中各种数据库模块间的兼容问题,现在已经通过了一个标准的DB API.目前的API版本(2.0)定义在PEP249中的Python Database API Specification v2.0中. 异常 为了尽可能准确地处理错误,API中定义了一些异常.它们被定义在一种层次结构中,所以可以通过一个except块捕捉多种异常. 连

python基础教程_学习笔记22:数据库支持

数据库支持 python数据库API 支持sql标准的可用数据库有很多,其中多数在python中都有对应的客户端模块. 全局变量 python DB API的模块特性 变量名 用途 apilevel 所使用的python db api版本 threadsafety 模块的线程安全等级 paramstyle 在sql查询中使用的参数风格 异常 异常 超类 描述 StandardError 所有异常的泛型基类 Warning StandardError 在非致命错误发生时引发 Error Stand

python sqlite3 数据库操作

SQLite3是python的内置模块,是一款非常小巧的嵌入式开源数据库软件. 1. 导入Python SQLite数据库模块 import sqlite3 2. python sqlite3模块的API """ sqlite3.connect(database [,timeout ,other optional arguments]) 该 API 打开一个到 SQLite 数据库文件 database 的链接.您可以使用 ":memory:" 来在 RA

运用Python语言编写获取Linux基本系统信息(三):Python与数据库编程,把获取的信息存入数据库

运用Python语言编写获取Linux基本系统信息(三):Python与数据库编程 有关前两篇的链接: 运用Python语言编写获取Linux基本系统信息(一):获得Linux版本.内核.当前时间 运用Python语言编写获取Linux基本系统信息(二):文件系统使用情况获取 一.实验环境: Python2.7.10.pycharm.VM虚拟机.CentOS6.3.mysql 二.MySQLdb模块: MySQLdb模式是Python中专门连接MySQL数据库的模块,另外Python开发环境的搭

python之数据库操作(sqlite)

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

八、Python Django数据库添加查询

Python Django数据库添加查询 对数据进行操作 一.创建记录 # pwd /root/csvt03 # ipython manage.py shell In [1]: from blog.models import Employee #(第一种方法) In [2]: Employee Out[2]: blog.models.Employee In [3]: emp = Employee() In [4]: emp.name = 'Alen' In [5]: emp.save() #(第

python访问数据库

1. python DB api简介 python DB api python访问数据库的统一接口规范,详细可参考https://www.python.org/dev/peps/pep-0249/ python DB api中主要包括三个重要的对象 数据库连接对象 connection,数据库交互对象 cursor和数据库异常类 exceptions 2. 使用python DB API访问数据库的流程 3. python+MYSQL开发环境的配置 python-mysql connector

Python实现数据库一键导出为Excel表格

依赖 Python2711 xlwt MySQLdb 数据库相关 连接 获取字段信息 获取数据 Excel基础 workbook sheet 案例 封装 封装之后 测试结果 总结 数据库数据导出为excel表格,也可以说是一个很常用的功能了.毕竟不是任何人都懂数据库操作语句的. 下面先来看看完成的效果吧. 数据源 导出结果  依赖 由于是Python实现的,所以需要有Python环境的支持 Python2.7.11 我的Python环境是2.7.11.虽然你用的可能是3.5版本,但是思想是一致的

Python接口测试实战3(上)- Python操作数据库

如有任何学习问题,可以添加作者微信:lockingfree 课程目录 Python接口测试实战1(上)- 接口测试理论 Python接口测试实战1(下)- 接口测试工具的使用 Python接口测试实战2 - 使用Python发送请求 Python接口测试实战3(上)- Python操作数据库 Python接口测试实战3(下)- unittest测试框架 Python接口测试实战4(上) - 接口测试框架实战 Python接口测试实战4(下) - 框架完善:用例基类,用例标签,重新运行上次失败用例