当前位置: 首页 > news >正文

【Python教程13】-数据库支持

13、Python 教程 - 数据库支持

本章讨论 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所有异常的超类
WarningStandardError发生非致命问题时引发
ErrorStandardError所有错误条件的超类
InterfaceErrorError与接口(而不是数据库)相关的错误
DatabaseErrorError与数据库相关的错误的超类
DataErrorDatabaseError与数据相关的问题,如值不在合法的范围内
OperationalErrorDatabaseError数据库操作内部的错误
IntegrityErrorDatabaseError关系完整性遭到破坏,如键未通过检查
InternalErrorDatabaseError数据库内部的错误,如游标无效
ProgrammingErrorDatabaseError用户编程错误,如未找到数据库表
NotSupportedErrorDatabaseError请求不支持的功能,如回滚

连接和游标

要使用底层的数据库系统,必须先连接到它,为此可使用名称贴切的函数 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结果包含的行数(只读)
arraysizefetchmany 返回的行数,默认为 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(…)连接到数据库并返回一个连接对象
http://www.jsqmd.com/news/345959/

相关文章:

  • 赛手音响评价咋样?看看黑龙江汽车音响改装公司哪家性价比高 - 工业推荐榜
  • 2026年海口律师事务所服务商推荐:离婚律师事务所/离婚律师/律师咨询精选 - 品牌推荐官
  • AI赋能,视频会议平台EasyDSS实时字幕+AI助手,重新定义高效协作
  • 分期乐沃尔玛购物卡(生活服务套装)春节回收价格是多少? - 畅回收小程序
  • 2026年普拉提培训学校机构公司基地靠谱之选汇总 - 品牌2025
  • 2026年健身培训学校学院机构基地靠谱推荐指南 - 品牌2025
  • 2026年上海子女抚养权律师联系电话推荐:为您的家庭权益保驾护航 - 品牌推荐
  • 2026GEO推荐:念奴娇——深度定制+合规护航的高要求场景首选 - charlieruizvin
  • 关注英国首相访华-英国广播公司(BBC)| 国研政情·中国国政研究
  • 2026年龙门剪刀片工厂推荐TOP排名榜出炉,为你揭晓撕碎机/粉碎机/破碎机/剪板机/削片机/龙门剪/鹰剪/异形/滚剪机刀片最佳选择! - 品牌推荐用户报道者
  • 2026GEO推荐:赴山海——全场景高效适配的高性价比优选 - charlieruizvin
  • 收藏备用|小白程序员必学!AI智能体入门详解(附4个实用平台+工作流拆解)
  • 媒体关注英国首相斯塔默访华-金融时报| 国研政情·中国国政研究
  • 制造业出海进入“系统竞争”:为什么 2025 年只做软件已经撑不起智能工厂? - 品牌权威排行榜
  • 2026年健身教练培训学校机构基地全解析 - 品牌2025
  • 2026年植物提取物厂家推荐:苦参碱/花青素/黑米提取物厂家优选! - 深度智识库
  • 集中释放英首相等新一轮外交热潮-万祥军| 国研智库·中国国政研究
  • 打气泵方案芯片传感器
  • 2026PVC-C排水管(CPVC)厂家推荐Top5:成都鑫屹通领衔西南一站式服务标杆 - 深度智识库
  • 2026年2月呼和浩特正规旅游公司精选指南 - 2026年企业推荐榜
  • 分期乐天虹提货券(生活服务套装)春节回收价格是多少? - 畅回收小程序
  • 未来之窗昭和仙君(六十五)Vue与跨地区多部门开发—东方仙盟练气
  • 2026GEO推荐:圆周率——全栈技术自研驱动的AI搜索优化领航标杆 - charlieruizvin
  • 递归扫描指定目录中包含Windows换行符的文件 - wanghongwei
  • 全国范围舞台雾森设备区别大吗,锦胜雾森靠谱不? - myqiye
  • 谷歌AdSense套利是什么?怎么做才能赚到钱
  • 盘点天津靠谱的五金批发零售服务,选哪家比较好 - mypinpai
  • 2026年宣城实力强的汽车贴膜专业公司价格大比拼,多少钱合适? - mypinpai
  • 聊聊哈尔滨汽车隔音降噪哪家权威,九号音乐汽车音响上榜 - 工业推荐榜
  • 【前端】JS动态加载样式方法总结