数据库支持

目录

1.Python数据库API

1.1 全局变量

1.2 异常

1.3 连接和游标

1.4 类型

2. SQLite和PySQLite


本章讨论Python数据库API,并介绍如何使用这个API来执行一些基本的SQL。本节使用简单的数据库SQLite,当然目前还有很多流行的商业数据库,如Oracle和SQL Server。

1.Python数据库API

1.1 全局变量

数据库模块包含三个全局变量,它们描述了模块的特征。该API设计得很灵活,无需进行太多包装就能配合多种不同的底层机制使用。三个全局变量的定义如下:

  • apilevel:使用的Python DB API版本,目前有1.0和2.0 两种值。
  • threadsafety:模块的线程安全程度,是一个[0,3]的整数。0表示线程不能共享模块,而3表示模块是绝对线程安全的。1表示线程可以共享模块本身,但不能共享连接。2表示线程可共享模块和连接,但是不能共享游标。
  • paramstyle:在SQL查询中使用哪种参数风格。

1.2 异常

DB API定义了多种异常,让我们能够细致的处理错误:

数据库支持_第1张图片

1.3 连接和游标

要使用底层的数据库系统,必须先连接它,为此可使用函数connect。该函数接收多个参数,具体参数如下:

数据库支持_第2张图片

函数connect返回一个连接对象,表示当前到数据库的会话。该连接对象主要有以下方法:

数据库支持_第3张图片

方法rollback()可能不可用,因为并非所有的数据库都是支持事务。可用时,这个方法撤销所有未提交的事务。关闭连接时,如果还有未提交的事务,将隐式地回滚他们,但仅当数据库支持回滚时才如此。

我们使用游标来执行SQL查询和查看结果。cursor游标对象支持的方法比较多:

数据库支持_第4张图片

游标对象主要有以下几个属性:

数据库支持_第5张图片

1.4 类型

为了能够与底层SQL数据库正确的互操作,DB API定义了一些构造函数和常量,用于提供特殊的类型和值:

数据库支持_第6张图片

2. SQLite和PySQLite

目前市面上有很多可用的数据库,它们都有相应的Python模块。我们选用SQLite作为数据库,该数据库引擎可直接使用本地文件,且不需要集中式数据库存储机制。

要使用Python标准库中的SQLite,可通过导入模块sqlite3来导入它,然后,就可以直接创建到数据库文件的连接。为此,只需要提供一个文件名(可以是文件的相对路径或绝对路径);如果指定的文件不存在,将自动创建它。我们一个示例程序,来演示对SQLite数据库的一系列操作:

数据文件内容如下:

1 张三 10 98.8 2010-10-31 16:44:42 优秀
2 李四 11 76.4 2008-05-21 17:43:02 良好
3 王五 10 88.8 2006-06-01 09:41:12 良好
4 刘六 14 60.1 2012-12-11 12:24:25 及格

初始化的代码:

import sqlite3

conn = sqlite3.connect(r'D:\text\somedatabase.db')
curs = conn.cursor()

curs.execute('''
          create table student(
          id number primary key,
          name string,
          age number,
          score float,
          birth date,
          add_time time,
          desc text
          )
          ''')

insert = 'insert into student values (?,?,?,?,?,?,?)'

for line in open(r'D:\text\student.txt',encoding='UTF-8'):
    fields = line.split(' ')
    curs.execute(insert, fields)
conn.commit()
conn.close()

执行查询操作

import sqlite3

conn = sqlite3.connect(r'D:\text\somedatabase.db')
curs = conn.cursor()
query = 'select * from student where id = 1'
print(query)

curs.execute(query)
for row in curs.fetchall():
    print(row)

 

你可能感兴趣的:(Python)