Python基础教程(第3版)中文版 第13章 数据库支持(笔记)

简介: Python基础教程(第3版)中文版 第13章 数据库支持(笔记)

                               第13章 数据库支持

13.1 python数据库API

DB API2.0(标准数据库API)

1.全局变量

apilevel  使用的API版本

threadsafety 线程安全程度

paramstyle SQL查询中的参数风格

apilevel(API级别)是一个字符串常量,指出使用的API版本

这个变量的值为'1.0'或'2.0'

threadsafety(线程安全程度)是一个0-3的整数。

0:线程不能共享模块 2:线程可共享模块和连接,但不能共享游标

如果不使用线程,就不用管。

paramstyle(参数风格) 'format'表示标准字符串格式设置方式,

'pyformat'表示扩展的格式编码

'qmark'表示 使用问号

'numeric'表示使用:1或:2这样的形式表示字段

'named'表示使用:foobar 的形式表示字段


2.异常

DB API定义了多种异常来处理错误。

StandardError 所有异常的超类

Warning StandardError 发生非致命问题时引发

Error StandardError 所有错误条件的超类

InterfaceError Error 与接口(而不是数据库)相关的错误

DatabaseError Error 与数据库相关的错误的超类

DataError DatabaseError 与数据相关的问题,如值不在合法的范围内

OperationalError DatabaseError 数据库操作内部的错误

IntegrityError DatabaseError 关系完整性遭到破坏,如键未通过检查

InternalError DatabaseError 数据库内部的错误,如游标无效

ProgrammingError DatabaseError 用户编程错误,如未找到数据库表

NotSupportedError DatabaseError 请求不支持的功能,如回滚


3.连接和游标

要使用底层的数据库系统,必须先连接到它。

使用函数connect来连接。

connect常用参数:

参 数 名 描 述 是否可选

dsn 数据源名称,具体含义随数据库而异 否

user 用户名 是

password 用户密码 是

host 主机名 是

database 数据库名称 是


connect返回一个连接对象。

连接对象支持方法:

close() 关闭连接对象。之后,连接对象及其游标将不可用

commit() 提交未提交的事务——如果支持的话;否则什么都不做

rollback() 回滚未提交的事务(可能不可用)

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

#游标对象

使用游标执行SQL查询和查看结果

游标支持的方法:

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

4.类型

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列


2.SQLite 和 PySQLite

SQLite是一个小型、可在本地运行的数据库。

python2.5开始就内置了SQLite

1.起步

导入:

import sqlite3

建立连接:

conn = sqlite3.connect('somedatabase.db')

获取游标:

curs = conn.cursor()

获取的游标可以用来SQL查询。

执行查询后,如果修改了数据,需要提交修改才会保存。

conn.commit()


关闭连接

conn.close()


2.实例

1.创建并填充数据库表

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()


2.搜索并处理结果

import sqlite3, sys


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

curs = conn.cursor()


querry = '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)L

       print('{}: {}'.format(*pair))

   print()


相关文章
|
9天前
|
JSON 数据可视化 API
Python 中调用 DeepSeek-R1 API的方法介绍,图文教程
本教程详细介绍了如何使用 Python 调用 DeepSeek 的 R1 大模型 API,适合编程新手。首先登录 DeepSeek 控制台获取 API Key,安装 Python 和 requests 库后,编写基础调用代码并运行。文末包含常见问题解答和更简单的可视化调用方法,建议收藏备用。 原文链接:[如何使用 Python 调用 DeepSeek-R1 API?](https://apifox.com/apiskills/how-to-call-the-deepseek-r1-api-using-python/)
|
20天前
|
IDE 测试技术 项目管理
【新手必看】PyCharm2025 免费下载安装配置教程+Python环境搭建、图文并茂全副武装学起来才嗖嗖的快,绝对最详细!
PyCharm是由JetBrains开发的Python集成开发环境(IDE),专为Python开发者设计,支持Web开发、调试、语法高亮、项目管理、代码跳转、智能提示、自动完成、单元测试和版本控制等功能。它有专业版、教育版和社区版三个版本,其中社区版免费且适合个人和小型团队使用,包含基本的Python开发功能。安装PyCharm前需先安装Python解释器,并配置环境变量。通过简单的步骤即可在PyCharm中创建并运行Python项目,如输出“Hello World”。
189 13
【新手必看】PyCharm2025 免费下载安装配置教程+Python环境搭建、图文并茂全副武装学起来才嗖嗖的快,绝对最详细!
|
6天前
|
存储 关系型数据库 分布式数据库
PolarDB 开源基础教程系列 8 数据库生态
PolarDB是一款开源的云原生分布式数据库,源自阿里云商业产品。为降低使用门槛,PolarDB携手伙伴打造了完整的开源生态,涵盖操作系统、芯片、存储、集成管控、监控、审计、开发者工具、数据同步、超融合计算、ISV软件、开源插件、人才培养、社区合作及大型用户合作等领域。通过这些合作伙伴,PolarDB提供了丰富的功能和服务,支持多种硬件和软件环境,满足不同用户的需求。更多信息请访问[PolarDB开源官方网站](https://openpolardb.com/home)。
38 4
|
1月前
|
关系型数据库 MySQL API
新手教程:数据库操作(使用PDO或MySQLi扩展)
本文为新手介绍如何使用PDO和MySQLi扩展连接与操作MySQL数据库。PDO更现代灵活,支持多种数据库,适合大多数应用;MySQLi提供面向过程和面向对象两种API,适合直接控制数据库操作。教程涵盖安装配置、创建连接、执行查询(查询、插入、更新、删除)及错误处理等内容。希望这篇教程能帮助你快速上手PHP中的数据库操作!
144 32
|
2月前
|
数据可视化 DataX Python
Seaborn 教程-绘图函数
Seaborn 教程-绘图函数
85 8
|
2月前
Seaborn 教程-主题(Theme)
Seaborn 教程-主题(Theme)
151 7
|
2月前
|
Python
Seaborn 教程-模板(Context)
Seaborn 教程-模板(Context)
56 4
|
2月前
|
数据可视化 Python
Seaborn 教程
Seaborn 教程
63 5
|
关系型数据库 数据库 Python
Python连接DB2数据库
Python连接DB2数据库
149 0
|
3月前
|
关系型数据库 MySQL 数据库连接
python脚本:连接数据库,检查直播流是否可用
【10月更文挑战第13天】本脚本使用 `mysql-connector-python` 连接MySQL数据库,检查 `live_streams` 表中每个直播流URL的可用性。通过 `requests` 库发送HTTP请求,输出每个URL的检查结果。需安装 `mysql-connector-python` 和 `requests` 库,并配置数据库连接参数。
147 68

热门文章

最新文章