MySQL Connector是mysql官方的驱动模块,兼容性特别好
一些第三方模块对MySQL8.0的兼容性不是很好,可能连接不上最新版的MySQL
安装
方式一:
https://dev.mysql.com/downloads/connector/python/
下载好后双击安装
方式二:
下载第三方包
pip install mysql-connector
连接数据库
方式一:
import mysql.connector
con = mysql.connector.connect(
# 数据地址
host = "localhost",
# 端口
port = "3306",
# 用户
user = "root",
# 密码
password= "123456",
# 数据库名称
database= "qa"
)
方式二:
import mysql.connector
config = {
"host" : "localhost" ,
"port" : 3306,
"user" : "root" ,
"password" : "123456" ,
"database" : "qa"
}
con = mysql.connector.connect(**config)
执行SQL
MySQL Connector里面的游标用来执行SQL语句,而且查询的结果集也会保存在游标中
# 创建游标
cursor = con.cursor()
# 执行SQL语句
cursor.execute( sql语句 )
# 打印结果
for in cursor:
print()
例子:
import mysql.connector
# 连接数据库
con = mysql.connector.connect(
host="localhost",
port="3306",
user="root",
password="123456",
database="qa"
)
# 创建游标
cursor = con.cursor()
sql = "select * from score;"
# 执行sql
cursor.execute(sql)
# 打印结果
for i in cursor:
print(i)
# 关闭数据库连接
con.close()
结果:
拓展:
- fetchone():取第一条数据,返回元组
- fetchall():取全部数据,返回列表
- fetchmany():取第一条数据,返回列表
例:
import mysql.connector
config = {
"host" : "localhost" ,
"port" : 3306,
"user" : "root" ,
"password" : "123456" ,
"database" : "qa"
}
con = mysql.connector.connect(**config)
cursor = con.cursor()
sql = "select * from score;"
cursor.execute(sql)
# 增删改要提交
con.commit()
# 取第一条数据,返回元组
# print(cursor.fetchone())
# 取第一条数据,返回列表
# print(cursor.fetchmany())
# 取全部数据,返回列表
print(cursor.fetchall())
# 关闭数据库连接
con.close()
结果:
事务控制
- connector提供了非常简单的事务控制函数
# 开启事务
con.start_transaction( [ 事务隔离级别 ] )
# 提交事务
con.commit()
# 回滚事务
con.rollback()
异常处理
# try中填写连接数据库的信息
try:
con = mysql.connector.connect(……)
[ con = start_transaction() ]
……
# 若是发生异常,可以回滚事务,并打印错误信息
except Exception as e:
[ con.rollback() ]
print(e)
# 若是数据库连接正常,表示有con变量,判断有con变量,则最后关闭数据库
finally:
if "con" in dir():
con.close()
栗子:
import mysql.connector
try:
# 连接数据库
con = mysql.connector.connect(
host = "localhost" ,
port = 3306,
user = "root" ,
password = "123456" ,
database = "qa"
)
# 开启事务
con.start_transaction()
# 创建游标
cursor = con.cursor()
# 使用预编译机制防止SQL注入
sql = "insert into my_class(id,name,class) value (%s,%s,%s)"
# 执行sql
cursor.execute(sql,(2,'张三','A'))
# 提交
con.commit()
except Exception as e:
# 如果数据库连接了,回滚事务
# 这里有可能数据库没有连接成功,那么就没有con这个变量,所以这里要加个判断
if 'con' in dir():
# 回滚事务
con.rollback()
print(e)
finally:
# 判断数据库连接(有con变量)才会需要关闭数据库
if 'con' in dir():
# 关闭数据库连接
con.close()