猿创征文|Python基础——Visual Studio版本——第六章 MySQL操作

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 猿创征文|Python基础——Visual Studio版本——第六章 MySQL操作

1、环境import pymysql  # 链接MySQL

db = pymysql.connect(host='rm-bp1zq3879r28p726lco.mysql.rds.aliyuncs.com',
                    port=3306, 
                    user='qwe8403000', 
                    password='Qwe8403000', 
                    db='mytest', 
                    charset='utf8')
print(db)

配置

pip3 config set global.index-url https://repo.huaweicloud.com/repository/pypi/simple

pip3 config list

pip3 install --upgrade pip

pip3 install pymysql

2、环境引入与连接测试

数据库是我阿里的数据库,可以用到23年。做测试没问题。


输入顺序:host连接地址,port连接端口号,user连接用户名,password连接密码,db连接数据库,charset连接的编码格式。


 
         

image.png

3、创建数据库表

核心编码


conn = pymysql.connect()  # 创建连接
cursor = conn.cursor()   #获取游标对象
rows = cursor.execute(sql) #执行SQL语句
conn.commit()  #提交数据库连接,如果是增、删、改操作,则必须提交
cursor.close() #关闭游标对象
conn.close()   #关闭数据库连接

image.png

import pymysql
#创建数据库连接
conn = pymysql.connect(host='rm-bp1zq3879r28p726lco.mysql.rds.aliyuncs.com',
                    port=3306, 
                    user='qwe8403000', 
                    password='Qwe8403000', 
                    db='mytest', 
                    charset='utf8')
cursor = conn.cursor()   #获取游标对象
#定义创建user表的sql语句,使用三引号'''表示格式化字符串
sql = """CREATE TABLE mytestuser20220829 ( userid int(8) NOT NULL auto_increment,
  username varchar(50) NOT NULL,
  password varchar(50) default NULL,
  PRIMARY KEY  (userid))"""
rows = cursor.execute(sql) #执行SQL语句
conn.commit()  #提交数据库连接,如果是增、删、改操作,则必须提交
print("mytestuser20220829表创建成功")
cursor.close() #关闭游标对象
conn.close()   #关闭数据库连接



4、增删改语句测试

游标可以多次执行sql语句,最终进行commit即可。


import pymysql
#创建数据库连接
conn = pymysql.connect(host='rm-bp1zq3879r28p726lco.mysql.rds.aliyuncs.com',
                    port=3306, 
                    user='qwe8403000', 
                    password='Qwe8403000', 
                    db='mytest', 
                    charset='utf8')
cursor = conn.cursor()   #获取游标对象
#定义创建user表的sql语句,使用三引号'''表示格式化字符串
sqlInsert1 = "insert into mytestuser20220829 values(0,'{0}',{1})".format("王语嫣", "123")
sqlInsert2 = "insert into mytestuser20220829 values(0,'{0}',{1})".format("小龙女","123")
sqlInsert3 = "insert into mytestuser20220829 values(0,'{0}',{1})".format("赵灵儿", "321")
sqlInsert4 = "insert into mytestuser20220829 values(0,'{0}',{1})".format("删除测试", "321")
cursor.execute(sqlInsert1)
cursor.execute(sqlInsert2)
cursor.execute(sqlInsert3)
cursor.execute(sqlInsert4)
sqlUpdate = "update mytestuser20220829 set password='{0}' where username='{1}'".format("潇洒的姑娘", "赵灵儿")
cursor.execute(sqlUpdate)
sqlDelete = "delete from mytestuser20220829 where username='{0}'".format("删除测试")
cursor.execute(sqlDelete)
#  提交
conn.commit()
#  关闭游标
cursor.close()
#  关闭数据库
conn.close()


image.png


5、查询语句测试

使用fetchall函数就可以获取游标中的数据了。


import pymysql
#创建数据库连接
conn = pymysql.connect(host='rm-bp1zq3879r28p726lco.mysql.rds.aliyuncs.com',
                    port=3306, 
                    user='qwe8403000', 
                    password='Qwe8403000', 
                    db='mytest', 
                    charset='utf8')
cursor = conn.cursor()   #获取游标对象
sql = "select * from mytestuser20220829"  # 执行SQL
cursor.execute(sql)  # 回去返回集合
data = cursor.fetchall()
for item in data:
    print(item[0])
    print(item[1])
    print(item[2])
#  关闭游标
cursor.close()
#  关闭数据库
conn.close()

image.png



6、事务测试

ACID_MySQL事务的四大特性详解(MySQL高频面试题)_红目香薰的博客-CSDN博客


异常提交

异常回滚测试,我这里一个正确的insert一个错误的,正确的肯定是能添加成功的,但是有由于第二个语句错误,所以回滚的时候一同回滚。


import pymysql
#创建数据库连接
conn = pymysql.connect(host='rm-bp1zq3879r28p726lco.mysql.rds.aliyuncs.com',
                    port=3306, 
                    user='qwe8403000', 
                    password='Qwe8403000', 
                    db='mytest', 
                    charset='utf8')
cursor = conn.cursor()   #获取游标对象
try:
    sql1 = "insert into mytestuser20220829 values(0,'{0}',{1})".format("事务测试1", "666")
    cursor.execute(sql1)  # 回去返回集合
    sql2 = "insert into mytestuser20220829 values(0,'{0}',{1},{2})".format("事务测试2", "666",66)
    cursor.execute(sql2)  # 回去返回集合
    conn.commit()
except:
    print("有异常,数据库回滚")
    conn.rollback()  #回滚事务,之前的修改操作都不生效
#  关闭游标
cursor.close()
#  关闭数据库
conn.close()

异常回滚,可以看到没有任何数据添加成功。

image.png



无异常提交

两个sql语句都是正确的sql,一同提交并无异常。


import pymysql
#创建数据库连接
conn = pymysql.connect(host='rm-bp1zq3879r28p726lco.mysql.rds.aliyuncs.com',
                    port=3306, 
                    user='qwe8403000', 
                    password='Qwe8403000', 
                    db='mytest', 
                    charset='utf8')
cursor = conn.cursor()   #获取游标对象
try:
    sql1 = "insert into mytestuser20220829 values(0,'{0}',{1})".format("事务测试1", "666")
    cursor.execute(sql1)  # 回去返回集合
    sql2 = "insert into mytestuser20220829 values(0,'{0}',{1})".format("事务测试2", "666")
    cursor.execute(sql2)  # 回去返回集合
    conn.commit()
except:
    print("有异常,数据库回滚")
    conn.rollback()  #回滚事务,之前的修改操作都不生效
#  关闭游标
cursor.close()
#  关闭数据库
conn.close()


两条sql都添加成功。


image.png


7、封装DBHelper.py

主要进行增删改、查询两个函数的封装,其中init是初始化参数,getConnect是获取游标


import pymysql
class DBHelper():
    def __init__(self):
        # 数据库连接参数
        self.host = "rm-bp1zq3879r28p726lco.mysql.rds.aliyuncs.com"
        self.user = "qwe8403000"
        self.pwd = "Qwe8403000"
        self.db = "mytest"
        self.charset = "utf-8"
    # 获取游标
    def getConnect(self):
        if not self.db:
            raise(NameError, "没有设置数据库信息")
        self.conn = pymysql.connect(host=self.host, port=3306, user=self.user, passwd=self.pwd, db=self.db, charset="utf8mb4")
        # 按照字典的方式返回
        cursor = self.conn.cursor(cursor=pymysql.cursors.DictCursor)
        if not cursor:
            raise(NameError, "连接数据库失败")
        else:
            return cursor
    # 查
    def query(self, sql):
        cursor = self.getConnect()
        cursor.execute(sql)
        result = cursor.fetchall()  # 获取查询的所有数据
        # 查询完毕后必须关闭连接
        self.conn.close()
        return result
   # 增删改
    def excute(self, sql):
        cursor = self.getConnect()
        cursor.execute(sql)
        self.conn.commit()
        self.conn.close()


使用DBHelper测试


from DBHelper import DBHelper
db=DBHelper()
db.excute("insert into mytestuser20220829 values(0,'{0}',{1})".format("DBHelper测试数据1", "666"))
db.excute("insert into mytestuser20220829 values(0,'{0}',{1})".format("DBHelper测试数据2", "666"))
db.excute("insert into mytestuser20220829 values(0,'{0}',{1})".format("DBHelper测试数据3", "666"))
db.excute("insert into mytestuser20220829 values(0,'{0}',{1})".format("DBHelper测试数据4", "666"))
db.excute("insert into mytestuser20220829 values(0,'{0}',{1})".format("DBHelper测试数据5", "666"))
result=db.query("select * from mytestuser20220829")
print(result)

image.png


封装完毕。

相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
23天前
|
关系型数据库 MySQL Linux
MySQL版本升级(8.0.31->8.0.37)
本次升级将MySQL从8.0.31升级到8.0.37,采用就地升级方式。具体步骤包括:停止MySQL服务、备份数据目录、下载并解压新版本的RPM包,使用`yum update`命令更新已安装的MySQL组件,最后启动MySQL服务并验证版本。整个过程需确保所有相关RPM包一同升级,避免部分包遗漏导致的问题。官方文档提供了详细指导,确保升级顺利进行。
105 16
|
2月前
|
关系型数据库 MySQL
mysql 5.7.x版本查看某张表、库的大小 思路方案说明
mysql 5.7.x版本查看某张表、库的大小 思路方案说明
87 5
|
2月前
|
关系型数据库 MySQL
mysql 5.7.x版本查看某张表、库的大小 思路方案说明
mysql 5.7.x版本查看某张表、库的大小 思路方案说明
62 1
|
3月前
|
Java 关系型数据库 MySQL
【编程基础知识】Eclipse连接MySQL 8.0时的JDK版本和驱动问题全解析
本文详细解析了在使用Eclipse连接MySQL 8.0时常见的JDK版本不兼容、驱动类错误和时区设置问题,并提供了清晰的解决方案。通过正确配置JDK版本、选择合适的驱动类和设置时区,确保Java应用能够顺利连接MySQL 8.0。
336 1
|
3月前
|
SQL JSON 关系型数据库
MySQL是一个广泛使用的开源关系型数据库管理系统,它有许多不同的版本
【10月更文挑战第3天】MySQL是一个广泛使用的开源关系型数据库管理系统,它有许多不同的版本
256 5
|
4月前
|
关系型数据库 MySQL 数据库
MySQL高级篇——MVCC多版本并发控制
什么是MVCC、快照读与当前读、隐藏字段、Undo Log版本链、ReadView、举例说明、InnoDB 解决幻读问题
|
2月前
|
SQL 关系型数据库 MySQL
MySql5.6版本开启慢SQL功能-本次采用永久生效方式
MySql5.6版本开启慢SQL功能-本次采用永久生效方式
51 0
|
Java Linux Shell
centos7内网离线安装face_recognition、python、pip、CMake、dlib,离线升级gcc/切换gcc,文末有face_recognition的docker版本
公司项目需要人脸识别,本来app自带人脸识别,结果api支持的设备试了一圈就一个同事的华为Mate40Pro可以,所以使用无望。接着找了一下免费的java离线人脸识别sdk,发现虹软的确实简单好用,一会就在linux上弄好并测试通过了,然而在准备集成进去开写代码时,不小心看到了一眼首次激活需联网,后续方可离线使用,好吧,我们内网机器首次都不可能的,接着看了下离线激活方法,首先需要企业认证,这一步我们肯定没法做的,毕竟不是之前的小公司了,营业执照啥的随便给我肯定不行,直接放弃了。后来在同事推荐下看了下face_recognition这个项目,之前基本没用过python,于是有了漫长的踩坑之旅。
775 1
|
TensorFlow 算法框架/工具 Python
Python升级tensorflow2.x版本相关问题:No module named ‘tensorflow.contrib‘ 问题解决
Python升级tensorflow2.x版本相关问题:No module named ‘tensorflow.contrib‘ 问题解决
332 0
|
NoSQL Redis 数据安全/隐私保护
redis集群加密码后,python的rediscluster模块升级1.3.4版本不生效
redis集群加密码后,python的rediscluster模块升级1.3.4版本不生效
redis集群加密码后,python的rediscluster模块升级1.3.4版本不生效