Python数据库操作【二】—— MySQL

MySQL简介

以下摘自百度百科

        MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。
        MySQL是一种关系型数据库管理系统,关系数据库将数据保存在不同的表中,而不是将所有数据放在一个大仓库内,这样就增加了速度并提高了灵活性。
        MySQL所使用的 SQL 语言是用于访问数据库的最常用标准化语言。MySQL 软件采用了双授权政策,分为社区版和商业版,由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,一般中小型网站的开发都选择 MySQL 作为网站数据库。

可根据电脑系统按需下载对应的MySQL,网上也有很多MySQL的安装教程,此处不再赘述。下载地址如下:

MySQL下载地址

如果不想在自己的电脑安装MySQL,可以考虑使用一款叫PhpStudy的软件,这个软件可以虚拟出一个MySQL数据库,但是存在一些bug,仅适用于学习,实际开发中不建议使用。下载地址如下:

PhpStudy下载地址

Python并未内置MySQL的操作库,所以需要导入第三方库,如MySQLdb、PyMySQL等,本文使用Python3的PyMySQL。

Python对MySQL的操作与Sqlite基本相同。

传送门:

Python数据库操作【一】—— Sqlite

本文代码已上传至GitHub,项目地址如下:

https://github.com/XMNHCAS/MySqlPythonDemo 


安装PyMySQL

首先需PyMySQL,打开cmd,输入以下命令,安装PyMySQL

pip3 install pymysql

 

 此处使用PhpStudy作为演示使用,如果本机已装MySQL,则可直接跳过。

打开PhpStudy,点击MySQL栏的启动。

当看到运行状态栏出现已启动的消息,则说明PhpStudy虚拟的MySQL数据库已成功启动。

点击左侧数据库一栏,可以查看数据库的状态,并实现更改密码等操作。


建库

打开vscode,新建一个CreateDatabase.py文件,然后在最上面导入pymysql。

import pymysql

 使用pymysql创建一个连接,并创建数据库。

import pymysql

# 打开数据库连接
db = pymysql.connect(host='localhost',
                     user='root',
                     password='root')

# 创建一个游标对象
cursor = db.cursor()

# 查看现有数据库
sql = "SHOW DATABASES"
msg = cursor.execute(sql)
print(cursor.fetchall())

# 创建数据库
sql = "CREATE DATABASE test"
msg = cursor.execute(sql)
print(msg)

# 查看现有数据库
sql = "SHOW DATABASES"
msg = cursor.execute(sql)
print(cursor.fetchall())


# 关闭游标与数据库连接
cursor.close()
db.close()

 运行后可以看到,test数据库已经成功创建。


建表 

新建一个CreateTable.py文件,建立User表。

import pymysql

# 打开数据库连接
db = pymysql.connect(host='localhost',
                     user='root',
                     password='root',
                     database='test')

# 创建一个游标对象
cursor = db.cursor()

# 查看现有表
sql = "SHOW TABLES"
msg = cursor.execute(sql)
print(cursor.fetchall())

# 创建user表
sql = """CREATE TABLE `user` (
  `ID` int(11) NOT NULL AUTO_INCREMENT,
  `Name` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL,
  `Age` int(11) DEFAULT NULL,
  PRIMARY KEY (`ID`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;"""
msg = cursor.execute(sql)
print(msg)

# 查看现有表
sql = "SHOW TABLES"
msg = cursor.execute(sql)
print(cursor.fetchall())

# 关闭游标与数据库连接
cursor.close()
db.close()

运行后可以看到,user表已经成功创建。 

 


增删改查(CRUD)

新增记录(Create)

直接使用游标执行插入语句,可以得到插入的数量。

import pymysql

# 打开数据库连接
db = pymysql.connect(host='localhost',
                     user='root',
                     passwd='root',
                     database='test')

# 创建游标对象
cursor = db.cursor()

# 插入单条数据
singleCount = cursor.execute(
    "INSERT INTO `user` (`Name`, Age) VALUES ('张三',18 )")
print(f"成功插入{singleCount}条数据")

# 批量插入数据
sql = "INSERT INTO `user` (`Name`, Age) VALUES (%s,%s)"
batchCount = cursor.executemany(sql, [('李四', 20), ('王五', 10)])
print(f"成功插入{batchCount}条数据")

# 关闭游标与数据库连接
cursor.close()
db.close()

运行结果:

打开navicat,查询user表:

可以看到数据已经成功插入。

检索记录(Retrieve)

与Sqlite相同,检索记录分三种模式,第一种是直接获取全部数据,第二种是获取前N条数据,第三种是移动游标,一条一条地获取数据。

import pymysql

# 打开数据库连接
db = pymysql.connect(host='localhost',
                     user='root',
                     passwd='root',
                     database='test')

# 创建游标对象
cursor = db.cursor()

# 获取全部记录
cursor.execute("SELECT * FROM `user`")
allData = cursor.fetchall()
print("直接获取全部记录:")
for item in allData:
    print(item)

# 获取前N条记录
cursor.execute("SELECT * FROM `user`")
manyData = cursor.fetchmany(2)
print("获取部分结果:")
for item in manyData:
    print(item)

# 一次读取一条结果,循环获取所有记录
cursor.execute("SELECT * FROM `user`")
print("一次读取一条结果,循环获取所有记录:")
while True:
    singleData = cursor.fetchone()
    if singleData is None:
        break
    print(singleData)

# 关闭游标
cursor.close()

# 提交事务
db.commit()

# 关闭数据库连接
db.close()

运行结果如下:

更新记录(Update)

可以修改单条记录,也可以批量修改。

import pymysql


# 打开数据库连接
db = pymysql.connect(host='localhost',
                     user='root',
                     passwd='root',
                     database='test')

# 创建游标对象
cursor = db.cursor()

cursor.execute("SELECT * FROM `user`")
print("修改前的数据:")
print(cursor.fetchall())

# 执行单条数据修改,并返回操作行数
singleUpdate = cursor.execute("UPDATE `user` SET Age = 20 WHERE `Name` = '张三'")
print(f"修改了{singleUpdate}条数据")

cursor.execute("SELECT * FROM `user`")
print("修改单条数据后的数据:")
print(cursor.fetchall())

# 执行批量修改,并返回操作行数
sql = "UPDATE `user` SET Age = %s WHERE `Name` = %s"
batchUpdate = cursor.executemany(sql, [(25, '李四'), (35, '王五')])
print(f"批量修改了{batchUpdate}条数据")

cursor.execute("SELECT * FROM `user`")
print("批量修改后的的数据:")
print(cursor.fetchall())

# 关闭游标
cursor.close()

# 提交事务
db.commit()

# 关闭数据库连接
db.close()

运行结果如下:

删除数据(Delete)

同样的,删除数据也支持单条数据删除或者是批量删除。

import pymysql

# 打开数据库连接
db = pymysql.connect(host='localhost',
                     user='root',
                     passwd='root',
                     database='test')

# 创建游标对象
cursor = db.cursor()

cursor.execute("SELECT * FROM `user`")
print("删除前的数据:")
print(cursor.fetchall())

# 执行单条数据修改,并返回操作行数
singleDelete = cursor.execute("DELETE FROM `user` WHERE ID = 1")
print(f"删除了{singleDelete}条数据")

cursor.execute("SELECT * FROM `user`")
print("删除单条数据后的数据:")
print(cursor.fetchall())

# 执行批量删除,并返回操作行数
sql = "DELETE FROM `user` WHERE ID = %s"
batchDelete = cursor.executemany(sql, [('2'), ('3')])
print(f"批量删除了{batchDelete}条数据")

cursor.execute("SELECT * FROM `user`")
print("批量删除后的的数据:")
print(cursor.fetchall())

# 关闭游标
cursor.close()

# 提交事务
db.commit()

# 关闭数据库连接
db.close()

运行结果如下:

猜你喜欢

转载自blog.csdn.net/XUMENGCAS/article/details/123127079