(十七)Python中级知识-Mysql数据库操作(mysql.connector模块)

1、概述

首先要操作MySql数据库之前,我们需要做两件事:

  • (1)、安装MySql数据库程序
  • (2)、安装MySql数据库与Python的连接器程序(Mysql-connector-python)

安装MySql数据库程序,本例程使用的是MySql5.7社区版,可以上官网下载安装最新版官网下载地址

在Windows10下安装Mysql-connector-python,打开PyCharm编译器下的Terminal命令窗口输入如下命令:

pip install mysql-connector-python -i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com

这段命令后半部分的解释:-i http://mirrors.aliyun.com/pypi/simple/ --trusted-host mirrors.aliyun.com,采用国内阿里镜像下载,如果不加很有可能会下载失败,提示连接超时。

MySql数据和Mysql-connector-python数据库连接器安装好之后,我们才可以在PyCharm编译器中导入mysql.connector模块。

import mysql.connector  

2、案例

案例的书写流程,如下:

  • 创建数据库连接
  • 获取数据库操作游标
  • 创建数据库
  • 创建数据表
  • 增、删、改、查操作
案例如下:
import mysql.connector  

# 数据库名
databaseName = "people"

# 获取Mysql驱动连接对象
conn = mysql.connector.connect(user='root', password='111111', host='localhost')
print(conn)

# 获取一个操作数据的游标
cur = conn.cursor()

# 判断数据库people是否已经存在的标记
isExistDatabase = False
# 检查pytest数据库是否存在,如果存在则True
cur.execute("SHOW DATABASES")
for x in cur:
    # x 是一个元组 ,[0]为数据库名称
    if x[0] == databaseName:
        isExistDatabase = True

# 如果数据库不存在,则创建数据库
if not isExistDatabase:
    cur.execute("CREATE DATABASE " + databaseName)
    print("创建数据库" + databaseName + "成功")


# 函数-在指定数据库下创建数据表
def ceateTable(cursor, database):
    # 选择 people 这个数据库
    cursor.execute("use " + database)
    # sql中的内容为创建一个名为user的表
    sql = """CREATE TABLE IF NOT EXISTS `user` (
              `id` VARCHAR (40) PRIMARY KEY,
              `name` VARCHAR (255),
              `age` INT DEFAULT 1
              )"""
    # 如果存在user这个表则删除
    cursor.execute("drop table if exists user")
    # 创建表
    cursor.execute(sql)
    print("数据表user创建成功")


# 函数-在user表插入一条数据
def insertRecord(cursor, isMuli):
    # 开始插入数据
    sql = "INSERT INTO user (id,name,age) VALUES (%s,%s,%s)"
    # 无论是数字(包括整数和浮点数)、字符串、日期时间或其他任意类型,都应该使用 % s占位符。
    if isMuli:
        val = [("9528", "小花", 19),
               ("9529", "小黑", 20),
               ("9530", "小红", 21)]
        cursor.executemany(sql, val)
    else:
        val = ("9527", "小明", 18)
        cursor.execute(sql, val)
    # 数据表内容有更新,必须使用到该语句
    conn.commit()
    print(cursor.rowcount, "条记录插入成功。")


# 函数-查询数据表记录
def selectAll(cursor):
    cursor.execute("SELECT * FROM user")
    result = cursor.fetchall()  # fetchall() 获取所有记录
    return result


# 函数-根据Id查询对应的数据表记录
def selectList(cursor, id):
    cursor.execute("SELECT * FROM user where id=" + id)
    result = cursor.fetchall()  # fetchall() 获取所有记录
    return result


# 函数-根据Id删除对应的数据表记录
def delById(cursor, id):
    sql = "DELETE FROM user WHERE id = %s"
    val = (id,)  # 此处逗号一定不能省
    cursor.execute(sql, val)
    conn.commit()
    print(cursor.rowcount, " 条记录被删除")


# 函数-根据Id修改对应的数据表记录
def updateById(cursor, id, name):
    sql = "UPDATE user SET name = '" + name + "' WHERE id = '" + id + "'"
    cursor.execute(sql)
    conn.commit()
    print(cursor.rowcount, " 条记录被修改")


print("***********创建数据表***********")
# 创建数据表函数
ceateTable(cur, databaseName)
print("***********插入一条数据***********")
# 向数据表插入一条数据
insertRecord(cur, False)
print("***********插入多条数据***********")
# 向数据表插入多条数据
insertRecord(cur, True)

print("***********查询所有记录***********")
users = selectAll(cur)
for u in users:
    print("id=" + u[0] + ",name=" + u[1] + ",age=" + str(u[2]))

print("***********根据ID查询记录***********")
users = selectList(cur, "9527")
for u in users:
    print("id=" + u[0] + ",name=" + u[1] + ",age=" + str(u[2]))

print("***********根据ID删除记录***********")
delById(cur, "9527")

print("***********根据ID修改记录***********")
updateById(cur, "9528", "小灰")

print("***********再次查询所有记录***********")
users = selectAll(cur)
for u in users:
    print("id=" + u[0] + ",name=" + u[1] + ",age=" + str(u[2]))

# 关闭游标
cur.close()

输出结果:
<mysql.connector.connection_cext.CMySQLConnection object at 0x00000226F1ADB128>
创建数据库people成功
***********创建数据表***********
数据表user创建成功
***********插入一条数据***********
1 条记录插入成功。
***********插入多条数据***********
3 条记录插入成功。
***********查询所有记录***********
id=9527,name=小明,age=18
id=9528,name=小花,age=19
id=9529,name=小黑,age=20
id=9530,name=小红,age=21
***********根据ID查询记录***********
id=9527,name=小明,age=18
***********根据ID删除记录***********
1  条记录被删除
***********根据ID修改记录***********
1  条记录被修改
***********再次查询所有记录***********
id=9528,name=小灰,age=19
id=9529,name=小黑,age=20
id=9530,name=小红,age=21

例子并不复杂,本文就不再单独提出某个函数的具体解释了,代码中的注释已经写得非常清晰,读者可以尝试运行代码直接观察会更加直观。

3、总结

在实际开发过程中对数据库的操作使用非常频繁,我们至少需要掌握最基本的增删改查。
在案例中反复用到了cursor.execute()这个函数,这个函数可以直接执行我们的sql语句,使用非常方便。
执行多条记录插入数据表的时候,可以使用cursor.executemany()这个函数。
数据表内容有更新,必须使用该语句conn.commit()。
数据查询返回的结果是一个元组列表。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章