54.python之连接数据库MySQL Connector

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()

版权声明:本文为qq_41917061原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。