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


相关文章
|
3月前
|
编解码 数据安全/隐私保护 Python
抖音批量发布视频工具,自动上传视频作品笔记,python发布软件
这个抖音批量发布工具包含三个主要模块:主上传程序、配置文件和视频预处理工具。主程序
|
16天前
|
缓存 Java 应用服务中间件
Spring Boot配置优化:Tomcat+数据库+缓存+日志,全场景教程
本文详解Spring Boot十大核心配置优化技巧,涵盖Tomcat连接池、数据库连接池、Jackson时区、日志管理、缓存策略、异步线程池等关键配置,结合代码示例与通俗解释,助你轻松掌握高并发场景下的性能调优方法,适用于实际项目落地。
208 4
|
3月前
|
机器学习/深度学习 数据安全/隐私保护 计算机视觉
过三色刷脸技术,过三色刷脸技术教程,插件过人脸python分享学习
三色刷脸技术是基于RGB三通道分离的人脸特征提取方法,通过分析人脸在不同颜色通道的特征差异
|
3月前
|
XML Linux 区块链
Python提取Word表格数据教程(含.doc/.docx)
本文介绍了使用LibreOffice和python-docx库处理DOC文档表格的方法。首先需安装LibreOffice进行DOC到DOCX的格式转换,然后通过python-docx读取和修改表格数据。文中提供了详细的代码示例,包括格式转换函数、表格读取函数以及修改保存功能。该方法适用于Windows和Linux系统,解决了老旧DOC格式文档的处理难题,为需要处理历史文档的用户提供了实用解决方案。
174 1
|
2月前
|
数据采集 索引 Python
Python Slice函数使用教程 - 详解与示例 | Python切片操作指南
Python中的`slice()`函数用于创建切片对象,以便对序列(如列表、字符串、元组)进行高效切片操作。它支持指定起始索引、结束索引和步长,提升代码可读性和灵活性。
|
3月前
|
API 数据安全/隐私保护 Python
小红书批量发布协议, 抖音自动批量发布软件脚本,笔记作品视频自动发布工具【python】
这个工具框架包含了小红书和抖音的批量发布功能,支持图片和视频处理、定时发布等功能
|
3月前
|
Web App开发 数据安全/隐私保护 Python
抖音快手小红书哔哩哔哩,批量发布作品笔记视频工具,自动发布作品上传笔记视频【python】
这个工具实现了四大平台的视频批量上传功能,包含完整的异常处理和日志记录。使用时需要配置
|
3月前
|
存储 JSON API
小红书批量发布笔记工具,小红书批量上传软件,python框架分享
这个框架包含了配置文件、工具函数、API封装和主程序四个模块。使用时需要先配置账号信息,
|
4月前
|
存储 算法 数据可视化
用Python开发猜数字游戏:从零开始的手把手教程
猜数字游戏是编程入门经典项目,涵盖变量、循环、条件判断等核心概念。玩家通过输入猜测电脑生成的随机数,程序给出提示直至猜中。项目从基础实现到功能扩展,逐步提升难度,适合各阶段Python学习者。
204 0

推荐镜像

更多