连接工具
mysqldb又叫MySQL-python
优点:基于C开发的库,速度快
缺点:在 Windows 平台安装非常不友好,经常出现失败的情况,多年不更新了,只兼容python2
mysqlclient
优点:基于C开发的库,速度快,兼容python3
缺点:编译安装可能会导致报各种错误
pymysql
优点:纯 Python 实现的驱动,兼容python3,使用简单
缺点:速度不如mysqldb
执行流程
安装pymysql
pip install pymysql
连接数据库函数
connect函数:连接数据库,根据连接的数据库类型不同,该函数的参数也不同,返回Connection对象
import pymysql
#获取连接
con = pymysql.connect(host="localhost",port=3306,user="root",password="root",db="test06",charset='utf8')
获取游标
cursor方法:获取操作数据库的Cursor对象,包含了很多操作数据的方法。cursor方法属于Connection对象
#创建cursor
cursor = connection.cursor()
执行单条sql语句
execute(query,args=None)
函数作用:执行单条的sql语句,执行成功后返回受影响的行数 参数说明:
query:要执行的sql语句,字符串类型
args:可选的序列或映射,用于query的参数值。如果args为序列,query中必须使用%s做
批量执行SQL语句
executemany(query,args=None)
函数作用:批量执行sql语句,比如批量插入数据,执行成功后返回受影响的行数
参数说明:
query:要执行的sql语句,字符串类型
args:嵌套的序列或映射,用于query的参数值
提交事务
commit方法:在修改数据库后,需要调用该方法提交对数据库的修改。
#提交事务
con.commit()
回滚
rollback方法:如果修改数据库失败,一般需要调用该方法进行数据库回滚,也就是将数据库恢复成修改之前的样子。
#如果出现异常,回滚
con.rollback()
创建数据库和表
创建数据库
# 安装pymysql:pip install pymysql
import pymysql
# 连接数据库
con = pymysql.connect(host='localhost',port=3306,user='root',passwd='root',charset='utf8')
# 获取一个和数据库交互的工具cursor
coursor = con.cursor()
# 编写SQL
sql = '''
CREATE DATABASE test
DEFAULT CHARACTER SET = 'utf8mb4';
'''
# 执行SQL
coursor.execute(sql)
# 关闭cursor
coursor.close()
# 关闭链接
con.close()
创建表
# pip install pymysql
import pymysql
# 链接数据库
con = pymysql.connect(host='localhost',port=3306,user='root',passwd='root',charset='utf8',db='test')
# 获取一个和数据库交互的工具cursor
coursor = con.cursor()
# 编写SQL
sql = '''
CREATE TABLE user(
id int NOT NULL PRIMARY KEY AUTO_INCREMENT COMMENT 'Primary Key',
username VARCHAR(32) not null,
age int(11) not null,
sex VARCHAR(5)
) DEFAULT CHARSET UTF8;
'''
# 执行SQL
coursor.execute(sql)
# 关闭cursor
coursor.close()
# 关闭链接
con.close()
增删改查
增
# pip install pymysql
import pymysql
def add_one():
# 链接数据库
con = pymysql.connect(host='localhost',port=3306,user='root',passwd='root',db='test',charset='utf8')
# 获取操作数据的对象 cursor
cursor = con.cursor()
# 编写SQL-DML
sql = "INSERT INTO user VALUES (0,%s,%s,%s);"
# 添加单条数据
args1 = ('刘备',22,'男')
cursor.execute(sql,args1)
# 添加多条数据
#args2 = (('孙权',23,'男'),('孙尚香',20,'女'))
#cursor.executemany(sql,args2)
# 提交事务
con.commit()
# 关闭Cursor
cursor.close()
# 关闭链接
con.close()
if __name__=='__main__':
add_one()
删
# pip install pymysql
import pymysql
def delete_one():
# 链接数据库
con = pymysql.connect(host='localhost',port=3306,user='root',passwd='root',db='test',charset='utf8')
# 获取操作数据的对象 cursor
cursor = con.cursor()
# 编写SQL-DML
sql='delete from user where id=2'
cursor.execute(sql)
# 提交事务
con.commit()
# 关闭Cursor
cursor.close()
# 关闭链接
con.close()
if __name__=='__main__':
delete_one()
改
# pip install pymysql
import pymysql
def update_one():
# 链接数据库
con = pymysql.connect(host='localhost',port=3306,user='root',passwd='root',db='test',charset='utf8')
# 获取操作数据的对象 cursor
cursor = con.cursor()
# 编写SQL-DML
#将id=2的年龄修改为18
sql='update user set age=%s where id=%s'
cursor.execute(sql,(18,3))
# 提交事务
con.commit()
# 关闭Cursor
cursor.close()
# 关闭链接
con.close()
if __name__=='__main__':
update_one()
查
#导入模块pip install pymysql
import pymysql
#创建连接
con = pymysql.connect(host='localhost',user='root',password='root',db='test',charset='utf8')
#创建游标对象cursor
cursor=con.cursor()
sql='select * from user'
#执行sql
cursor.execute(sql)
#获取结果集
#fetchone(): 该方法获取下一个查询结果集。结果集是一个对象
#fetchall(): 接收全部的返回结果行。
#fetchmany(num):查询指定条数的记录。
result = cursor.fetchall()
print(result)
#rowcount: 这是一个只读属性,并返回执行execute()方法后影响的行数。
print(cursor.rowcount)
# 关闭Cursor
cursor.close()
# 关闭链接
con.close()
Sql异常处理
Sql异常
SQL语句出现错误时,执行sql会出错,后续代码不会执行,游标等都不会关闭
解决示例
#导入模块pip install pymysql
import pymysql
#SQL语句出现错误时,执行sql会出错,后续代码不会执行,游标等都不会关闭,用try except做处理
def query_data():
#创建连接
con = pymysql.connect(host='localhost',user='root',password='root',db='test',charset='utf8')
#创建游标对象cursor
cursor=con.cursor()
#编写sql【SQL是错误的】
sql='select * from user where'
try:
#执行sql
cursor.execute(sql)
#获取结果集
result = cursor.fetchall()
print(result)
except Exception as e:
print('SQL语句出现错误')
# 关闭Cursor
cursor.close()
# 关闭链接
con.close()
if __name__=='__main__':
query_data()