# 数据库支持
#数据库https://wiki.python.org/moin/DatabaseInterfaces。
''' Python DB API的模块属性
apilevel 使用的Python DB API版本
threadsafety 模块的线程安全程度如何
paramstyle 在SQL查询中使用哪种参数风格
'''
# 13.1.2 异常
# Python DB API指定的异常
# StandardError 所有异常的超类
# Warning StandardError 发生非致命问题时引发
# Error StandardError 所有错误条件的超类
# InterfaceError Error 与接口(而不是数据库)相关的错误
# DatabaseError Error 与数据库相关的错误的超类
# DataError DatabaseError 与数据相关的问题,如值不在合法的范围内
# OperationalError DatabaseError 数据库操作内部的错误
# IntegrityError DatabaseError 关系完整性遭到破坏,如键未通过检查
# InternalError DatabaseError 数据库内部的错误,如游标无效
# ProgrammingError DatabaseError 用户编程错误,如未找到数据库表
# NotSupportedError DatabaseError 请求不支持的功能,如回滚
# 13.1.3 连接和游标
# 函数connect的常用参数
# 参数名 描 述 是否可选
# dsn 数据源名称,具体含义随数据库而异 否
# user 用户名 是
# password 用户密码 是
# host 主机名 是
# database 数据库名称 是
#连接对象的方法
# 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列
# 13.2 SQLite 和 PySQLite
# 13.2.1 起步
# import sqlite3
# conn = sqlite3.connect('somedatabase.db') # 如果不存在就要自动创建
# curs = conn.cursor() # 连接获得游标
# conn.commit() #提交游标
# conn.close() #关闭游标
# 13.2.2 数据库应用程序示例
#1、创建并填充数据库表
# 2、搜索并处理结果
#1、 Python DB API:这个API定义了一个简单的标准化接口,所有数据库包装器模块都必须遵循它,这让编写使用多个不同数据库的程序更容易。
# 连接:连接对象表示到SQL数据库的通信链路,使用方法cursor可从连接获得游标。你还可使用连接对象来提交或回滚事务。使用完数据库后,就可将连接关闭了。
# 游标:游标用于执行查询和查看结果。可逐行取回查询结果,也可一次取回很多(或全部)行。
# 类型和特殊值:DB API指定了一组构造函数和特殊值的名称。构造函数用于处理日期和时间对象,还有二进制数据对象;而特殊值用于表示关系型数据库的类型,如STRING、
# NUMBER和DATETIME。 SQLite:这是一个小型的嵌入式SQL数据库,标准Python发行版中包含其Python包装器,即模块sqlite3。这个数据库速度快、易于使用,且不要求搭建专门的服务器。