第十三章 python 数据库编程

python 数据库编程

  • 一、python数据库API简介
      • 1. 全局变量
      • 2. 数据库API的核心类
      • 3. 操作数据库的基本流程
  • 二、操作SQLite数据库
  • 三、操作MySQL数据库
      • 1. 下载和安装MySQL数据库
      • 2. 使用pip工具管理模块
        • (1)查看已安装的模块
        • (2)卸载已安装的模块
        • (3)安装模块
      • 3. 执行DDL语句(DDL:数据库模式定义语言)
      • 4. 执行DML语句(DML:数据操纵语言)
      • 5. 执行查询语句
      • 6. 调用存储过程

一、python数据库API简介

1. 全局变量

  • apilevel:该全局变量显示数据库模块的API版本号。对于支持DB API 2.0版本的数据库模块来说,该变量值通常就是2.0。如果这个变量不存在,则可能该数据库模块暂时还不支持DB API 2.0。读者应该考虑选择使用支持该数据库的其他数据库模块。
  • threadsafety:该全局变量指定数据库模块的线程安全等级,该等级值为0〜3,其中3代表该模块完全是线程安全的;1表示该模块具有部分线程安全性,线程可以共享该模块,但不能共享连接:0则表示线程完全不能共享该模块。
  • paramstyle:该全局变量指定当SQL语句需要参数时,可以使用哪种风格的参数。该变量可能返回如下变量值。
    • format:表示在SQL语句中使用Python标准的格式化字符串代表参数。例如,在程序中需要参数的地方使用%,,接下来程序即可为这些参数指定参数值。
    • pyformat:表示在SQL语句中使用扩展的格式代码代表参数。比如使用%(name),这样即可使用包含key为name的字典为该参数指定参数值。
    • qmark:表示在SQL语句中使用问号(?)代表参数。在SQL语句中有几个参数,全
      部用问号代替。
    • numeric:表示在SQL语句中使用数字占位符(:N)代表参数。例如:1代表一个参数,:2也表示一个参数,这些数字相当于参数名,因此它们不一定需要连续。
    • named:表示在SQL语句中使用命名占位符(:name)代表参数。例如:name代表一个
      参数,:age也表示一个参数。

2. 数据库API的核心类

connect()函数,该函数用于连接数据库,并返回数据库连接对象。
数据库连接对象通常会具有如下方法和属性。

  • cursor(factory=Cursor):打开游标。
  • commit():提交事务。
  • rollback():回滚事务。
  • close():关闭数据库连接。
  • isolationjevel:返回或设置数据库连接中事务的隔离级别。
  • in transaction:判断当前是否处于事务中。

游标对象通常会具有如下方法和属性。

  • execute(sql[, parameters]):执行SQL语句oparameters参数用于为SQL语句中的参数指定值。
  • executemany(sql, seq_o匸parameters):重复执行 SQL 语句。可以通过 seq_o[parameters 序列为SQL语句中的参数指定值,该序列有多少个元素,SQL语句被执行多少次。
  • executescript(sql script):这不是DB API 2.0的标准方法。该方法可以直接执行包含多条SQL语句的SQL脚本。
  • fetchone():获取查询结果集的下一行。如果没有下一行,则返回None。
  • fetchmany(size=cursor.arraysize):返回査询结果集的下N行组成的列表。如果没有更多的数据行,则返回空列表。
  • fetchallO:返回査询结果集的全部行组成的列表。
  • close():关闭游标。
  • rowcount:该只读属性返回受SQL语句影响的行数。对于executemany。方法,该方法所修改的记录条数也可通过该属性获取。
  • lastrowid:该只读属性可获取最后修改行的rowido
  • airaysize:用于设置或获取fetchmany()默认获取的记录条数,该属性默认为1。有些数据库模块没有该属性。
  • description:该只读属性可获取最后一次查询返回的所有列的信息。
  • connection:该只读属性返回创建游标的数据库连接对象。有些数据库模块没有该属性。

Python的DB API 2.0由一个connect()开始,一共涉及数据库连接和游标两个核心
API。它们的分工如下。

  • 数据库连接:用于获取游标、控制事务。
  • 游标:执行各种SQL语句。

3. 操作数据库的基本流程

使用Python DB API 2.0操作数据库的基本流程如下。
①调用connect()方法打开数据库连接,该方法返回数据库连接对象。
②通过数据库连接对象打开游标。
③ 使用游标执行SQL语句(包括DDL、DML、select查询语句等)。如果执行的是査询语句,则处理查询数据。
④关闭游标。
⑤关闭数据库连接。

第十三章 python 数据库编程_第1张图片

二、操作SQLite数据库

三、操作MySQL数据库

1. 下载和安装MySQL数据库

2. 使用pip工具管理模块

(1)查看已安装的模块

査看己安装的模块,使用如下命令。
pip 3how packagename
启动命令行窗口,在窗口中输入如下命令。
pip show mysql-connector-python
在上面的命令中,mysql-connector-python就是该模块的名字。

(2)卸载已安装的模块

卸载已安装的模块,使用如下命令。
pip uninstall packagename
在命令行窗口中输入如下命令。
pip uninstall mysql-connector-python
如果要查看已安装的所有模块,可以使用如下命令。
pip list

(3)安装模块

安装模块,使用如下命令。
pip install packagename
在命令行窗口中输入如下命令。
pip install mysql-connector-python
运行该命令,将看到程序下载并安装mysql-connector-python模块的过程,最后会生成如下提示信息。
Successfully installed mysql-connector-python-8.0.11
上面的信息提示该模块安装成功。
如果希望安装不同版本的模块,则可指定版本号。例如:
pip install packagename ==1.0.4 # 安装指定版本

3. 执行DDL语句(DDL:数据库模式定义语言)

Python程序在连接MySQL数据库时可指定远程服务器IP地址和端口,如果不指定服务器IP地址和端口,则使用默认的服务器IP地址localhost和默认端口 3306。

代码如下:

import mysql.connector

# ①、连接数据库
conn = mysql.connector.connect(user='root', password='32147',
    host='localhost', port='3306',
    database='python', use_unicode=True)
# ②、获取游标
c = conn.cursor()
# ③、执行DDL语句创建数据表
c.execute('''create table user_tb(
	user_id int primary key auto_increment,
	name varchar(255),
	pass varchar(255), 
	gender varchar(255))''')
# 执行DDL语句创建数据表
c.execute('''create table order_tb(
	order_id integer primary key auto_increment,
	item_name varchar(255),
	item_price double,
    item_number double,
	user_id int,
    foreign key(user_id) references user_tb(user_id) )''')
# ④、关闭游标
c.close()
# ⑤、关闭连接
conn.close()

4. 执行DML语句(DML:数据操纵语言)

MySQL数据库模块同样可以使用游标的execute()方法执行DML的insert、update、delete语句,对数据库进行插入、修改和删除数据操作。

# ③、调用executemany()方法把同一条SQL语句执行多次
c.executemany('insert into user_tb values(null, %s, %s, %s)',
    (('sun', '123456', 'male'),
    ('bai', '123456', 'female'),
    ('zhu', '123456', 'male'),
    ('niu', '123456', 'male'),
    ('tang', '123456', 'male')))

使用MySQL数据库模块中游标的executemany()方法同样可重复执行update、delete语句。

5. 执行查询语句

调用execute()方法执行select语句査询数据,在该SQL语句中同样使用了%s作为占位符。

6. 调用存储过程

MySQL数据库模块为游标对象提供了一个非标准的callproc(sel£ procname, args=())方法,该方法用于调用数据库存储过程。该方法的procname参数代表存储过程的名字,而args参数则用于为存储过程传入参数。

# ③、调用callproc()方法执行存储过程
# 虽然add_pro存储过程需要3个参数,但最后一个参数是传出参数,
# 因此程序不会用它的值
result_args = c.callproc('add_pro', (5, 6, 0))
# 返回的result_args既包含了传入参数的值,也包含了传出参数的值
print(result_args)
# 如果只想访问传出参数的值,可直接访问result_args的第3个元素,如下代码
print(result_args[2])

运行上面的程序,可以看到如下输出结果。
(5, 6, 11)
11

你可能感兴趣的:(python)