第十三章 数据库支持

本章讨论Python数据库API(一种连接到SQL数据库的标准化方式),并演示如何使用这个API来执行一些基本的SQL。最后,本章将讨论其他一些数据库技术。
关Python支持的数据库清单

Python数据库API

标准数据库API(DB API)
Python官方维基百科中的数据库编程指南

全局变量

变量名 描述
apilevel 使用的Python DB API版本;是一个字符串常量,指出了使用的API版本。
threadsafety 模块的线程安全程度如何;是一个0~3(含)的整数。0表示线程不能共享模块,而3表示模块是绝对线程安全的。1表示线程可共享模块本身,但不能共享连接,而2表示线程可共享模块和连接,但不能共享游标。
paramstyle 在SQL查询中使用哪种参数风格;format’表示标准字符串格式设置方式(使用基本的格式编码),如在要插入参数的地方插入%s。'pyformat’表示扩展的格式编码,即旧式字典插入使用的格式编码,如%(foo)s;'qmark’表示使用问号,'numeric’表示使用:1和:2这样的形式表示字段(其中的数字是参数的编号),而’named’表示使用:foobar这样的形式表示字段(其中foobar为参数名)

异常

异常 超类 描述
StandardError 所有异常的超类
Warning StandardError 发生非致命问题时引发
Error StandardError 所有错误条件的超类
InterfaceError Error 与接口(而不是数据库)相关的错误
DatabaseError Error 与数据库相关的错误的超类
DataError DatabaseError 与数据相关的问题,如值不在合法的范围内
OperationalError DatabaseError 数据库操作内部的错误
IntegrityError DatabaseError 关系完整性遭到破坏,如键未通过检查
InternalError DatabaseError 数据库内部的错误,如游标无效
ProgrammingError DatabaseError 用户编程错误,如未找到数据库表
NotSupportedError DatabaseError 请求不支持的功能,如回滚

连接和游标

要使用底层的数据库系统,必须先连接到它,为此可使用名称贴切的函数connect。接受多个参数,具体是哪些取决于要使用的数据库。
函数connect的常用参数

参数名 描述 是否可选
dsn 数据源名称,具体含义随数据库而异
user 用户名
password 用户密码
host 主机名
database 数据库名称

函数connect返回一个连接对象,表示当前到数据库的会话。
连接对象的方法

方法名 描述
close() 关闭连接对象。之后,连接对象及其游标将不可用
commit() 提交未提交的事务——如果支持的话;否则什么都不做
rollback() 回滚未提交的事务(可能不可用)
cursor() 返回连接的游标对象

游标对象的方法

名称 描述
callproc(name[, params]) 使用指定的参数调用指定的数据库过程(可选)
close() 关闭游标。关闭后游标不可用
execute(oper[, params]) 执行一个SQL操作——可能指定参数
executemany(oper, pseq) 执行指定的SQL操作多次,每次都序列中的一组参数
fetchone() 以序列的方式取回查询结果中的下一行;如果没有更多的行,就返回None
fetchmany([size]) 取回查询结果中的多行,其中参数size的值默认为arraysize
fetchall() 以序列的序列的方式取回余下的所有行
nextset() 跳到下一个结果集,这个方法是可选的
setinputsizes(sizes) 用于为参数预定义内存区域
setoutputsize(size[, col]) 为取回大量数据而设置缓冲区长度

游标对象的属性

名称 描述
description 由结果列描述组成的序列(只读)
rowcount 结果包含的行数(只读)
arraysize fetchmany返回的行数,默认为1

类型

DB API构造函数和特殊值

名称 描述
Date(year, month, day) 创建包含日期值的对象
Time(hour, minute, second) 创建包含时间值的对象
Timestamp(y, mon, d, h, min, s) 创建包含时间戳的对象
DateFromTicks(ticks) 根据从新纪元开始过去的秒数创建包含日期值的对象
TimeFromTicks(ticks) 根据从新纪元开始过去的秒数创建包含时间值的对象
imestampFromTicks(ticks) 根据从新纪元开始过去的秒数创建包含时间戳的对象
Binary(string) 创建包含二进制字符串值的对象
STRING 描述基于字符串的列(如CHAR)
BINARY 描述二进制列(如LONG或RAW)
NUMBER 描述数字列
DATETIME 描述日期/时间列
ROWID 描述行ID列

SQLite和PySQLite

起步

导入模块sqlite3来导入Python标准库中的SQLit

import sqlite3#导入模块sqlite3
conn = sqlite3.connect('beyond.db')#连接数据库,若数据库不存在则自动创建
curs = conn.cursor()#从连接获得游标,这个游标可用来执行SQL查询。
conn.commit()#在每次修改数据库后都进行提交
conn.close()#关闭连接

数据库应用程序示例

ABBREV.txt数据库信息放在与程序同一个目录下
ABBREV.txt
在文件ABBREV.txt中,每行都是一条数据记录,字段之间用脱字符(^)分隔。
数字字段直接包含数字,而文本字段用两个波浪字符(~)将其字符串值括起。

将这个ASCII文件中的数据转换为SQL数据库
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,
protein FLOAT,
fat FLOAT,
ash FLOAT,
carbs FLOAT,
fiber FLOAT,
sugar FLOAT
)
''')
query = 'INSERT INTO food VALUES (?,?,?,?,?,?,?,?,?,?)'
field_count = 10
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()

当你运行这个程序时(文件ABBREV.txt和它位于同一个目录),它将新建一个名为food.db的文件,其中包含数据库中的所有数据。

2,搜索并处理结果

数据库查询程序

import sqlite3,sys
conn = sqlite3.connect('food.db')
curs = conn.cursor()
query = 'SELECT * FROM food WHERE ' + 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('{}: {}'.format(*pair)) print()

小结

概念 解释
Python DB API 这个API定义了一个简单的标准化接口,所有数据库包装器模块都必须遵循它,这让编写使用多个不同数据库的程序更容易。
连接 连接对象表示到SQL数据库的通信链路,使用方法cursor可从连接获得游标。你还可使用连接对象来提交或回滚事务。使用完数据库后,就可将连接关闭了。
游标 游标用于执行查询和查看结果。可逐行取回查询结果,也可一次取回很多(或全部)行。
类型和特殊值 DB API指定了一组构造函数和特殊值的名称。构造函数用于处理日期和时间对象,还有二进制数据对象;而特殊值用于表示关系型数据库的类型,如STRING、NUMBER和DATETIME。
SQLite 这是一个小型的嵌入式SQL数据库,标准Python发行版中包含其Python包装器,即模块sqlite3。这个数据库速度快、易于使用,且不要求搭建专门的服务器。

本章介绍的函数

函数 描述
connect(…) 连接到数据库并返回一个连接对象

第十三章 数据库支持相关推荐

  1. 【数据库系统】数据库系统概论====第十三章 数据库技术发展

    第十三章 数据库技术发展 文章目录 第十三章 数据库技术发展 13.1数据库技术发展概述 13.2数据库发展的3个阶段 13.2.1第一代数据库系统 13.2.2第二代数据库系统 13.2.3新一代数 ...

  2. 第二十三章 MySQL数据库 手册2 SQL语句

    第二十三章 MySQL数据库 手册2 SQL语句 实验二:用SQL语句,管理数据库 `危险命令,delete 后不加 where 条件代表删除所有数据 delete.` `更加危险的删除命令trunc ...

  3. DreamFactory - 第3章生成数据库支持的API

    DreamFactory - 第3章生成数据库支持的API DreamFactory的功能十分强大,但是除了生成数据库支持的REST API之外,没有比这更受欢迎的功能了.通过采用这种自动化方法,开发 ...

  4. 数字图像处理:第二十三章 基于内容的图象与视频检索

    第二十三章基于内容的图象与视频检索 目录 1.    引言 2.    基于内容检索的图象特征 3.    基于内容的视频标注与检索 作业 1. 引言 随着社会的信息化发展日益深入,互连网日益普及,越 ...

  5. 《Reids 设计与实现》第十三章 Sentinel

    <Reids 设计与实现>第十三章 Sentinel 文章目录 <Reids 设计与实现>第十三章 Sentinel 一.简介 二.启动并初始化 Sentinel 1.初始化服 ...

  6. 《深入理解 Spring Cloud 与微服务构建》第十三章 配置中心 Spring Cloud Config

    <深入理解 Spring Cloud 与微服务构建>第十三章 配置中心 Spring Cloud Config 文章目录 <深入理解 Spring Cloud 与微服务构建>第 ...

  7. 第十三章 使用动态SQL(一)

    文章目录 第十三章 使用动态SQL(一) 动态SQL简介 动态SQL与嵌入式SQL `%SQL.Statement`类 创建一个对象实例 %SelectMode属性 %SchemaPath属性 %Di ...

  8. 第十三章 系统错误消息 - 一般系统错误消息 S - Z

    文章目录 第十三章 系统错误消息 - 一般系统错误消息 S - Z 第十三章 系统错误消息 - 一般系统错误消息 S - Z 错误代码 描述 <SUBSCRIPT> 下标值不合法或Glob ...

  9. 4.10 第十三章:Linux系统管理技巧

    第十三章:Linux系统管理技巧 13.1监控系统的状态 13.1.1使用w命令查看当前系统的负载 13.1.2用vmstat命令监控系统的状态 13.1.3用top命令显示进程所占的系统资源 13. ...

最新文章

  1. R可视化ggplot2绘制堆叠的条形图(Stacked Barplot)
  2. ITRON系统使用方法
  3. 贝叶斯多元Logistics回归理论基础
  4. Mavan的配置,以及与IDEA版本不一致,解决办法
  5. ieee文章作者对不齐怎么办呢?
  6. 自然语言处理之长短时记忆网络(六)
  7. python箱线图读取的几列数据_【分析篇】:python 基本数据统计和绘制箱线图
  8. HTML 显示特殊字符时转义操作
  9. android 字体点击变色,Android TextView 中实现部分文字变色以及点击事件
  10. 百面机器学习—3.逻辑回归与决策树要点总结
  11. django 学习个人总结 之many_to_one
  12. delphixe android服务,delphi xe10 android服务gps [复制]
  13. Pyside2 背景图片填充
  14. threejs 模型添加文字的几种方式
  15. bat 删除文件脚本
  16. tomcat禁止外网访问,允许locat访问
  17. 【Android】CTS测试
  18. 没有学历可以做程序员吗?
  19. 计算总成绩和平均成绩
  20. Check It Again: Progressive Visual Question Answering via Visual Entailment

热门文章

  1. HTML滚动条S默认最小值,css修改滚动条默认样式
  2. http协议组成(请求状态码)
  3. Bootstrap中的列表的使用
  4. 为input输入框添加圆角并去除阴影
  5. 课时55.详情和概要标签(理解)
  6. Windows PowerShell Cookbook
  7. Java中转发(Forward)和重定向(Redirect)的区别
  8. PHP中常用加解密方式
  9. Cesium调用Geoserver发布的 WMS、WFS服务
  10. jquery 获取easyui combobox选中的值