Python数据库API简介
各数据库模块共有的全局变量
apilevel
API版本号,为2.0时,支持python
threadsafety 线程安全等级
值 | 0 | 1 | 2 | 3 |
---|
含义 | 线程不能共享 | 共享模块,不共享连接 | | 线程完全安全 |
paramstyle 参数风格
format | pyformat | qmark | numeric | named |
---|
Python标准参数 | 扩展的格式代码 | 问号 | (:N) | (:name) |
%s等 | %(name) | | 【:2】:2个参数 | 命名占位符 |
# 数据库API的核心类
数据库连接对象
基本方法与属性
属性 | 作用 |
---|
isolation_level | 返回或设置数据库连接中,事务的隔离级别 |
in_transaction | 判断当前是否处于事务中 |
autocommit | 设置为True时,执行DML语句后自动提交,无须调用commit()方法 |
基本方法 | cursor(factory=Cursor) | close() | commit() | rollback() |
---|
作用 | 打开游标 | 关闭数据库连接 | 提交事务 | 回滚事务 |
更多方法
- 注册自定义函数 create_function(name, num_params, func)
|参数|name|num_params|func|
|:----|:----|:----|:----|
|含义|函数名称(自定义)|参数个数|函数名称(前置)|
def test():print(1)
mydb.create_function('my_name', 0, test)
- 注册聚集函数 create_aggregate(name, num_params, aggregate_class)
|参数|name|num_params|aggregate_class|
|:----|:----|:----|:----|
|含义|函数名称(自定义)|参数个数|聚集函数类名|
常见的聚集函数:sum(), avg(), count(), max(), min()
- 注册比较函数 create_collation(name, callable)
callable:包含2个待比较的参数str1, str2
比较结果 | str1 = str2 | str1 > str2 | str1 < str2 |
---|
返回值 | 0 | 正整数 | 负整数 |
def test():
if str1 == str2: return 0
elif str1 > str2: return 1
else: return -1
mydb.create_collation('my_name', test)
游标对象
方法 | fetchone() | fetchmany(size=cursor.arraysize) | | fetchall() |
---|
获取查询结果 | 一行 | 多行,size默认为1 | | 全部行 |
方法 | execute() | executemany() | executescript |
---|
参数 | sql, [para] | sql, seq | ‘sql1; sql2; …’ |
参数解释 | para:sql中的参数 | seq:参数的序列 | |
执行sql语句 | 一次 | 重复执行(不用于select语句) | 执行多条 |
111
属性 | 返回内容 |
---|
rowcount | 受SQL语句影响的行数 |
lastrowid | 最后修改行的id |
description | 最后一次查询返回的所有列的信息 |
connection | 创建游标的数据库连接对象 |
# 操作数据库的基本流程
import mysql.connector
mydb = mysql.connector.connect(host="localhost", user="name", passwd="123", database='AAA')
mycursor = mydb.cursor()
mycursor.execute(sql)
mycursor.close()
mydb.close()
# SQLite数据库(内置)
只是一个数据库,不需要服务器进程。常用于手机等资源有限的设备。
界面管理工具下载地址:sqliteexpert.com/download.html
创建数据库
import sqlite3
mydb = sqlite3.connect('test.db')
- 如需创建内存中的数据库,使用特殊的数据库名称【:memory:】即可
创建数据表
获取游标——通过SQL语句创建
mycursor = mydb.cursor()
mycursor.execute('create table first_table(name, gender)')
事务控制
事务:多步数据库操作组成的逻辑执行单元,具有以下特性:
- 原子性:最小的执行单位,不可再分
- 一致性:要么全部成功执行,要么全部失败
- 隔离性:各事务的执行互不干扰
- 持久性:对数据的改变是永久的,不可逆的
回滚事务:事务执行失败时执行,有2种方式
自动回滚 | 系统错误,强制退出时 |
---|
手动回滚 | 调用数据库连接对象的rollback |
MySQL数据库(开源)
下载与安装
-
下载地址:dev.mysql.com/downloads/mysql,选择社区版 MSI Installer
-
自定义安装:
- 选择安装地址
- 勾选MySQL Server 8.0.11 - X64下所有选项 + Connector/Python(3.0) 8.0.11 - X64
- 选中Standalone MySQL Server/Classic MySQL Replication
- 设置账号、密码,可添加用户
-
启动编辑窗口
5. MySQL自带的命令行窗口:
【开始】——MySQL Server 8.0 —— MySQL 8.0 command Line Client - Unicode
- 更多工具:SQLyog, MySQLAdministrator
使用pip工具管理模块
代码 | 作用 |
---|
pip list | 查看已安装的所有模块 |
pip show 模块名称 | 查看已安装的指定模块 |
pip install 模块名称 (==1.0.4) | 安装模块(可指定版本号) |
pip uninstall 模块名称 | 卸载模块 |
- 在CMD界面下操作
- 例:查看【Connector/Python】是否安装成功:pip show mysql-connector-python
调用存储过程
在MySQL的命令行界面中操作
delimiter
create procdure add_pro(a int, b int, out sum int)
begin
set sum = a + b
end;
调用方法:在python中,连接数据库,创建游标对象
a = c.callpro("add_pro", (5,6,0))
# SQLite与MySQL的区别
| SQLite | MySQL |
---|
存入数据时,限制数据类型 | 允许忽略 | 不可忽略 |
远程服务器IP与端口号 | 不可指定 | 可指定(默认为localhost, 3306端口) |
# DDL与DML语句
DDL语句 | Data Definition Language | create, alter, drop, truncate |
---|
DML语句 | Data Manipulation Language | 增删改查 |