返回列表 发帖

CentOS8使用PyMySQL管理MySQL8.0

笺注:这是在 CentOS8_Yum安装MySQL8.0 的基础上进行的。


Python3的安装可参考:CentOS8安装Python3


MySQL服务器联网安装第三方库(PyMySQL):
[root@centos8 ~]# pip3 install pymysql -i http://mirrors.aliyun.com/pypi/simple --trusted-host=mirrors.aliyun.com
Looking in indexes: http://mirrors.aliyun.com/pypi/simple
Collecting pymysql
  Downloading http://mirrors.aliyun.com/pypi/packages/1a/ea/dd9c81e2d85efd03cfbf808736dd055bd9ea1a78aea9968888b1055c3263/PyMySQL-0.10.1-py2.py3-none-any.whl (47kB)
    100% |████████████████████████████████| 51kB 1.7MB/s
Installing collected packages: pymysql
Successfully installed pymysql-0.10.1

由此还可以获得软件包的下载地址:(需要另外手动下载软件包)
[root@centos8 ~]#wget http://mirrors.aliyun.com/pypi/packages/1a/ea/dd9c81e2d85efd03cfbf808736dd055bd9ea1a78aea9968888b1055c3263/PyMySQL-0.10.1-py2.py3-none-any.whl

备注:有些软件包区分32/64位,但有些不区分。


查看软件版本:
[root@centos8 ~]# pip3 freeze
PyMySQL==0.10.1




创建测试的数据库(data1):
mysql> create database data1 default charset utf8 collate utf8_general_ci;
Query OK, 1 row affected, 2 warnings (0.01 sec)

自定义用户(zhuohua@'127.0.0.1')授权:(只允许本地登录)
mysql> create user zhuohua@'127.0.0.1' identified with mysql_native_password by '888';
Query OK, 0 rows affected (0.01 sec)

mysql> grant all on *.* to zhuohua@'127.0.0.1';
Query OK, 0 rows affected (0.00 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)


查看用户zhuohua@'127.0.0.1'的权限:
mysql> show grants for zhuohua@'127.0.0.1';




######

服务器本地测试与数据库的连接的脚本:
[root@centos8 ~]# cat xx.py
#coding=utf-8

import pymysql

def db_connect():
        db = pymysql.connect("127.0.0.1", "zhuohua", "888", "data1",3306,charset="utf8") # 打开数据库连接;MySQL服务器的IP地址(本地回环地址)、用户名、密码、其中一个库的名称、端口号、字符集。
        cursor = db.cursor()
        sql="SELECT VERSION()"
        cursor.execute(sql)
        Results = cursor.fetchone()

        print ("Database version : %s " % Results) # 显示数据库的版本信息
        print (Results)
        print ("%s" % Results)

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

def main():
        try:
                db_connect()
        except Exception as e:
                print(e)

if __name__ == "__main__":
        main()


设置脚本权限:
[root@centos8 ~]# chmod a+x xx.py

脚本运行的结果:
[root@centos8 ~]# python3 xx.py
Database version : 8.0.17
('8.0.17',)
8.0.17




######

查看MySQL的最大连接数的脚本:
[root@centos8 ~]# cat xx.py
#coding=utf-8

import pymysql

def db_connect():
        db = pymysql.connect("127.0.0.1", "zhuohua", "888", "data1",3306,charset="utf8")
        cursor=db.cursor()
       
        sql="show variables like '%max_connections%'" #查看MySQL的最大连接数
        cursor.execute(sql)
        Results=cursor.fetchall()
        print(Results)
        print(Results[0])
        print(type(Results[0]))
        print() #输出空行
        a=(Results[0])
        aa=a[1]
        print(aa)
        print(type(aa))
        aaa=int(aa) #转换为整型
        print(aaa)
        print(type(aaa))
       
        db.close()

def main():
        try:
                db_connect()
        except Exception as e:
                print(e)

if __name__ == "__main__":
        main()


脚本运行的结果:
[root@centos8 ~]# python3 xx.py
(('max_connections', '151'), ('mysqlx_max_connections', '100'))
('max_connections', '151')
<class 'tuple'>

151
<class 'str'>
151
<class 'int'>






###

查看MySQL当前打开的连接数的脚本:
[root@centos8 ~]# cat xx.py
#coding=utf-8

import pymysql

def db_connect():
        db = pymysql.connect("127.0.0.1", "zhuohua", "888", "data1",3306,charset="utf8")
        cursor=db.cursor()
       
        sql="show status like 'threads_connected'" #查看MySQL当前打开的连接数
        cursor.execute(sql)
        Results=cursor.fetchone()
        print(Results)
        print(Results[1])
        print(type(Results[1]))
        print()
        a=Results[1]
        b=float(Results[1]) #转换为数值(有小数点
        print(b)
        print(type(b))
       
        db.close()

def main():
        try:
                db_connect()
        except Exception as e:
                print(e)

if __name__ == "__main__":
        main()


脚本运行的结果:
[root@centos8 ~]# python3 xx.py
('Threads_connected', '2')
2
<class 'str'>

2.0
<class 'float'>







###

查看MySQL当前处于激活状态的连接数的脚本:
[root@centos8 ~]# cat xx.py
#coding=utf-8

import pymysql

def db_connect():
        db = pymysql.connect("127.0.0.1", "zhuohua", "888", "data1",3306,charset="utf8")
        cursor=db.cursor()
       
        sql="show status like 'threads_running'" #查看MySQL当前处于激活状态的连接数
        cursor.execute(sql)
        Results=cursor.fetchone()
        print(Results)
        print(Results[1])
        print(type(Results[1]))
       
        db.close()

def main():
        try:
                db_connect()
        except Exception as e:
                print(e)

if __name__ == "__main__":
        main()


脚本运行的结果:
[root@centos8 ~]# python3 xx.py
('Threads_running', '2')
2
<class 'str'>







######

创建表的脚本:
[root@centos8 ~]# cat xx.py
#coding=utf-8

import pymysql

def create_table():

        db = pymysql.connect("127.0.0.1", "zhuohua", "888", "data1",3306,charset="utf8")
       
        cursor = db.cursor()
       
        sql = """CREATE TABLE table1 (
        id int not null auto_increment,
        name varchar(20) NOT NULL,
        math float,
        primary key(id)
        )"""
       
        try:
                cursor.execute(sql) #执行SQL语句
                print("创建表成功。")

        except Exception as e:
                print("创建表失败,CASE:%s" % e)

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

               
if __name__ == "__main__":
       
        create_table()


脚本运行的结果:
[root@centos8 ~]# python3 xx.py
创建表成功。

图片1.png
2020-11-2 10:59







######

插入记录的脚本:
[root@centos8 ~]# cat xx.py
#coding=utf-8

import pymysql

def insert_record():

        db = pymysql.connect("127.0.0.1", "zhuohua", "888", "data1",3306,charset="utf8")
       
        cursor=db.cursor()
       
        try:
                sql_1 = "INSERT INTO table1(name,math)" \
                " VALUES('李大杰',18)"
               
                cursor.execute(sql_1)

                sql_2 = "INSERT INTO table1(name,math)" \
                " VALUES('范小冰',80)"
               
                cursor.execute(sql_2)

                sql_3 = "INSERT INTO table1(name,math)" \
                " VALUES('zhuohua',70.5)"
               
                cursor.execute(sql_3)
               
               
                db.commit() #提交到数据库执行;必须是所有SQL语句都执行成功才会提交

                print("插入记录成功。")

        except Exception as e:

                print("插入记录失败,CASE:%s" % e)

                db.rollback() # 如果发生错误就回滚

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


if __name__ == "__main__":

        insert_record() # 这种方法可以确保要么所有记录都插入成功,或都插入失败


脚本运行的结果:
[root@centos8 ~]# python3 xx.py
插入记录成功。






######

查询记录的脚本:
[root@centos8 ~]# cat xx.py
#coding=utf-8

import pymysql

def query_data():

        try:
                db = pymysql.connect("127.0.0.1", "zhuohua", "888", "data1",3306,charset="utf8")
                cursor=db.cursor()
                sql="select * from table1 order by id" #SQL语句
                cursor.execute(sql) # 执行SQL语句
                Results=cursor.fetchall() # 获取数据
                print(Results) # 输出数据

        except Exception as e:
                print(e) # 显示异常对象真正的异常信息
        finally:
                db.close() # 关闭数据库连接
               
if __name__ == "__main__":
        query_data()


脚本运行的结果:
[root@centos8 ~]# python3 xx.py
((1, '李大杰', 18.0), (2, '范小冰', 80.0), (3, 'zhuohua', 70.5))






######

查询记录的脚本:
[root@centos8 ~]# cat xx.py
#coding=utf-8

import pymysql

sql = "SELECT * FROM table1 WHERE math >= 60"  # SQL语句

def query_data():

        db = pymysql.connect("127.0.0.1", "zhuohua", "888", "data1",3306,charset="utf8")
       
        cursor = db.cursor()

        try:

                a = cursor.execute(sql) # 给变量进行赋值时,已经执行了SQL语句

                #print(a)

                if a is 0:
                        print("没有找到匹配的记录")

                Results = cursor.fetchall()

                for row in Results:
                        id1 = row[0]
                        name1 = row[1]
                        math1 = row[2]

                        print("id=%s,name=%s,\n"
                        "math=%s" %(id1,name1,math1))

        except Exception as e:

                print("Error: unable to fecth data.Error info:%s" % e)

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


if __name__ == "__main__":
        query_data()


脚本运行的结果:(假如找到匹配的记录)
[root@centos8 ~]# python3 xx.py
id=2,name=范小冰,
math=80.0
id=3,name=zhuohua,
math=70.5

脚本运行的结果:(假如没有找到匹配的记录)
[root@centos8 ~]# python3 xx.py
没有找到匹配的记录





######

查询记录的脚本:(查询中只取一个值)
[root@centos8 ~]# cat xx.py
#coding=utf-8

import pymysql

sql_1 = "SELECT id FROM table1 WHERE name = 'Zhuohua'" #MySQL/MariaDB中关键字的查询不区分英文大小写

def query_data(sql):

        db = pymysql.connect("127.0.0.1", "zhuohua", "888", "data1",3306,charset="utf8")
       
        cursor = db.cursor()

        try:

                a = cursor.execute(sql)

                if a == 0:
                        print("没有找到匹配的记录")

                Results = cursor.fetchone()

                print(Results[0]) #输出结果的第一个区块
                print(type(Results[0]))

        except Exception as e:
                pass #占位符
        finally:
                db.close() # 关闭数据库连接


if __name__ == "__main__":

        Result_1 = query_data(sql_1)


脚本运行的结果:(假如找到匹配的记录)
[root@centos8 ~]# python3 xx.py
3
<class 'int'>

脚本运行的结果:(假如没有找到匹配的记录)
[root@centos8 ~]# python3 xx.py
没有找到匹配的记录






######

查询记录的脚本:(查询中使用like语句)
[root@centos8 ~]# cat xx.py
#coding=utf-8

import pymysql

sql_1 = "SELECT math FROM table1 WHERE name like '%大_'"
def query_data(sql):

        db = pymysql.connect("127.0.0.1", "zhuohua", "888", "data1",3306,charset="utf8")
       
        cursor = db.cursor()
        try:

                a = cursor.execute(sql)

                if a is 0:
                        print("没有找到匹配的记录")

                Results = cursor.fetchone()

                print(Results[0]) #输出结果的第一个区块
                print(type(Results[0]))
                print()
                a=Results[0]
                b=str(Results[0]) #转换为字符串
                print(b)
                print(type(b))
       
        except Exception as e:
                pass #占位符
        finally:
                db.close() # 关闭数据库连接

if __name__ == "__main__":

        Result_1 = query_data(sql_1)


脚本运行的结果:(假如找到匹配的记录)
[root@centos8 ~]# python3 xx.py
18.0
<class 'float'>

18.0
<class 'str'>


脚本运行的结果:(假如没有找到匹配的记录)
[root@centos8 ~]# python3 xx.py
没有找到匹配的记录







######

查询记录的脚本:(查询中使用聚会函数语句)
[root@centos8 ~]# cat xx.py
#coding=utf-8

import pymysql

sql_1 = "SELECT avg(math) FROM table1"  # SQL语句

def query_data(sql):

        db = pymysql.connect("127.0.0.1", "zhuohua", "888", "data1",3306,charset="utf8")
       
        cursor = db.cursor()

        try:
                cursor.execute(sql)
                Results = cursor.fetchone()

                print(Results[0])
                print(type(Results[0]))
               
                a=Results[0]
                b=round(a,2) #保留两位小数,是四舍五入
                print(b)

        except Exception as e:
                pass
        finally:
                db.close()


if __name__ == "__main__":

        Result_1 = query_data(sql_1)


脚本运行的结果:
[root@centos8 ~]# python3 xx.py
56.166666666666664
<class 'float'>
56.17







######

更改记录的脚本:
[root@centos8 ~]# cat xx.py
#coding=utf-8

import pymysql

db = pymysql.connect("127.0.0.1", "zhuohua", "888", "data1",3306,charset="utf8")
       
cursor = db.cursor()

def update_table():

        try:

                sql1 = "UPDATE table1 SET math = 66.5 WHERE name = 'zhuoHUA'"  # 更新数据;MySQL/MariaDB中关键字的定位不区分英文大小写

                cursor.execute(sql1) # 执行SQL语句


                sql2 = "UPDATE table1 SET math = 77.5 WHERE name like '__杰%'"  # 更新数据

                cursor.execute(sql2) # 执行SQL语句


                db.commit() #提交到数据库执行;必须是两条SQL语句都执行成功才会提交

                print("UPDATE SUCCESS.")

        except Exception as e:

                print('UPDATE MySQL table failed.Case:%s' % e)
               
                db.rollback() # 发生错误时回滚

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


if __name__ == "__main__":
        update_table()


脚本运行的结果:
[root@centos8 ~]# python3 xx.py
UPDATE SUCCESS.

图片2.png
2020-11-2 11:03


备注:假如没有找到匹配的记录进行更新,会直接跳过,不会报错的。






######

删除记录的脚本:
[root@centos8 ~]# cat xx.py
#coding=utf-8

import pymysql

db = pymysql.connect("127.0.0.1", "zhuohua", "888", "data1",3306,charset="utf8")
       
cursor = db.cursor()

def delete_record():

        try:

                sql1 = "DELETE FROM table1 WHERE name = '范小冰'"  #删除记录

                cursor.execute(sql1) # 执行sql语句


                sql2 = "DELETE FROM table1 WHERE name like  '%杰'"  #删除记录

                cursor.execute(sql2) # 执行sql语句
               
                db.commit() #提交到数据库执行;必须是两条SQL语句都执行成功才会提交
               
                print("DELETE SUCCESS.")

        except Exception as e:

                print("DELETE RECORD FAILED.Case:%s" % e)

                db.rollback() # 发生错误时回滚

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


if __name__ == "__main__":
        delete_record()


脚本运行的结果:
[root@centos8 ~]# python3 xx.py
DELETE SUCCESS.

图片3.png
2020-11-2 11:03


备注:假如没有找到匹配的记录进行删除,会直接跳过,不会报错的。






######

删除表的脚本:
[root@centos8 ~]# cat xx.py
#coding=utf-8

import pymysql

def del_table():

        db = pymysql.connect("127.0.0.1", "zhuohua", "888", "data1",3306,charset="utf8")
       
        cursor = db.cursor()
       
        sql = """show tables like 'table1'"""  # 检查表(table1)是否已经存在
       
        a = cursor.execute(sql) # 给变量进行赋值时,命令已经执行了
       
        if a == False:  # 0 就是False; 1 就是 True
       
                print("表不存在")

        else:

                sql = """DROP TABLE IF EXISTS table1"""  # 如果表存在就删除
               
                cursor.execute(sql) # 执行SQL语句

                print("删除表成功")
       
        db.close()
       
if __name__ == "__main__":
        del_table()


脚本运行的结果:(假如表存在)
[root@centos8 ~]# python3 xx.py
删除表成功

脚本运行的结果:(假如表不存在)
[root@centos8 ~]# python3 xx.py
表不存在






########

卸载安装好的第三方库(PyMySQL):
[root@centos8 ~]# pip3 uninstall pymysql -y
Uninstalling PyMySQL-0.10.1:
  Successfully uninstalled PyMySQL-0.10.1



离线安装第三方库(PyMySQL):
[root@centos8 ~]# find ./ -name "*.whl"
./PyMySQL-0.10.1-py2.py3-none-any.whl

[root@centos8 ~]# pip3 install PyMySQL-0.10.1-py2.py3-none-any.whl
Processing ./PyMySQL-0.10.1-py2.py3-none-any.whl
Installing collected packages: PyMySQL
Successfully installed PyMySQL-0.10.1








######

服务器本地测试MySQL是否启动中的脚本:
[root@centos8 ~]# cat xx.py
#coding=utf-8

import os

try:
        a=os.popen("ps -ef |grep mysqld |grep -v grep > /dev/null && echo $?").read()
        #print(a)
        #print(type(a))
        #print()
        b=int(a) #转换为整型
        print(b)
        #print(type(b))

        if b == 0:
                print('MySQL正在运行中')

except:
        print('MySQL已经停止运行')


脚本运行的结果:
图片4.png
2020-11-2 11:05




######

服务器本地启动MySQL的脚本:
[root@centos8 ~]# cat xx.py
#coding=utf-8

import os

try:
        a=os.popen("systemctl start mysqld > /dev/null").read()

except Exception as e:
        print(e) # 显示异常对象真正的异常信息



######

服务器本地关闭MySQL的脚本:
[root@centos8 ~]# cat xx.py
#coding=utf-8

import os

try:
        a=os.popen("systemctl stop mysqld > /dev/null").read()

except Exception as e:
        print(e) # 显示异常对象真正的异常信息





相关文章:
CentOS8使用PyMySQL管理MySQL5.5

返回列表