返回列表 发帖

Python3脚本管理Windows下的MySQL

笺注:MySQL的安装可参考 Windows2012R2_安装MySQL5.5


在MySQL服务器创建一个库data1:
mysql> create database data1 default charset utf8 collate utf8_general_ci;

再授权数据库用户zhuohua@'%'(密码888),可以从任意IP进行访问,对库data1有完全控制的权限:
mysql> grant all on data1.* to zhuohua@'%' identified by '888';

图片1.png


Windows、Linux系统安装第三方库(PyMySQL)可参考:Python3脚本管理Linux下的MySQL

笺注:假如只是在远程客户端通过Python3脚本管理MySQL数据库,那么MySQL服务器连Python3都不需要安装。



######

例子一:
Win7客户端远程测试与数据库的连接的脚本:(C:\Users\jacky\Desktop\xx.py)

#coding=utf-8
import pymysql

def db_connect():
       
        db = pymysql.connect("192.168.168.133", "zhuohua", "888", "data1",3306,charset="utf8") #连接数据库;MySQL服务器的IP地址(192.168.168.133)、用户名、用户密码、其中一个库的名称(data1)、端口号(3306)、字符集。
       
        cursor = db.cursor()
       
        Sql_1 = "SELECT VERSION()" #查看MySQL的版本信息
        cursor.execute(Sql_1) #执行SQL语句
       
        Result_1 = cursor.fetchone() #使用fetchone只能获取一个元素

        print(Result_1)
        print(type(Result_1))
       
        print("-" * 10)
        print(Result_1[0]) #输出结果的第一项
        print(f"数据库连接成功,数据库的版本信息:{Result_1[0]}")
       
        db.commit() #把执行任务提交到数据库
        db.close()

def func_main():
        try:
                db_connect()
        except Exception as e:
                print(f"数据库连接失败,原因: {e}")

if __name__ == "__main__":
        func_main()

       
脚本运行的结果:
C:\Users\jacky\Desktop>python xx.py
('5.5.45',)
<class 'tuple'>
----------
5.5.45
数据库连接成功,数据库的版本信息:5.5.45

C:\Users\jacky\Desktop>





######

例子二:
Win7客户端远程创建表的脚本:

#coding=utf-8
import pymysql

def create_table():
       
        db = pymysql.connect("192.168.168.133", "zhuohua", "888", "data1",3306,charset="utf8")
        cursor = db.cursor()
       
        #创建表table1,字段id会自动增长
        Sql_1 = """CREATE TABLE table1 (
        id int not null auto_increment,
        name varchar(20) NOT NULL,
        math float,
        date datetime,time datetime,
        primary key(id)
        )"""

        cursor.execute(Sql_1)

        db.commit() #把执行任务提交到数据库
        db.close()
       

def func_main():
        try:
                create_table()
        except Exception as e:
                print(f"创建表失败,原因: {e}")
        else:
                print("创建表成功。")
               
if __name__ == "__main__":

        func_main()


脚本运行的结果:
C:\Users\jacky\Desktop>python xx.py
创建表成功。

C:\Users\jacky\Desktop>


使用SQLyog查看表table1的表结构:
图片2.png





######

例子三:
Win7客户端远程插入一条记录的脚本:

#coding=utf-8
import pymysql

def insert_record():
        global db
        db = pymysql.connect("192.168.168.133", "zhuohua", "888", "data1",3306,charset="utf8")
        cursor = db.cursor()
       
        Sql_1 = "INSERT INTO table1(name,math,date,time)" \
        " VALUES('李大杰',18,'2019-9-9','2019-9-9 7:9:18')"
               
        cursor.execute(Sql_1)
       
        db.commit() #把执行任务提交到数据库
        db.close()
               
def func_main():
        try:
                insert_record()
        except Exception as e:
                print(f"插入记录失败,原因: {e}")
                db.rollback() #如果发生错误就回滚
        else:
                print("插入记录成功。")
               
if __name__ == "__main__":

        func_main()


脚本运行的结果:
C:\Users\jacky\Desktop>python xx.py
插入记录成功。

C:\Users\jacky\Desktop>


使用SQLyog查看表数据:(插入记录成功)
图片3.png





######

例子四:
Win7客户端远程一次性插入多条记录的脚本:

#coding=utf-8
import pymysql

import datetime
dt = datetime.datetime.now()
tt_1 = dt.strftime('%Y-%m-%d') #当前日期
tt_2 = dt.strftime('%Y-%m-%d %H:%M:%S') #当前时间

def insert_record():
        global db
        db = pymysql.connect("192.168.168.133", "zhuohua", "888", "data1",3306,charset="utf8")
        cursor = db.cursor()
       
        Key_1 = '范小冰'
        Key_2 = 28
        Key_3 = '2019-10-08'
        Key_4 = '2019-10-08 05:06:08'
       
        Sql_2 = f"INSERT INTO table1(name,math,date,time) VALUES('{Key_1}',{Key_2},'{Key_3}','{Key_4}')"
        cursor.execute(Sql_2)

        Key_1 = 'zhuohua'
        Key_2 = 38.5
        Key_3 = tt_1
        Key_4 = tt_2
       
        Sql_3 = f"INSERT INTO table1(name,math,date,time) VALUES('{Key_1}',{Key_2},'{Key_3}','{Key_4}')"
        cursor.execute(Sql_3)
               
        db.commit() #把执行任务提交到数据库;必须是所有SQL语句都执行成功才会提交
        db.close()
               
def func_main():
        try:
                insert_record()
        except Exception as e:
                print(f"插入记录失败,原因: {e}")
                db.rollback() #如果发生错误就回滚
        else:
                print("插入记录成功。")
               
if __name__ == "__main__":

        func_main()


脚本运行的结果:
C:\Users\jacky\Desktop>python xx.py
插入记录成功。

C:\Users\jacky\Desktop>


使用SQLyog查看表数据:(插入记录成功)
图片4.png





######

例子五:
Win7客户端远程输出数据库中某个表的所有记录的脚本:

#coding=utf-8
import pymysql

def query_data():
        db = pymysql.connect("192.168.168.133", "zhuohua", "888", "data1",3306,charset="utf8")
        cursor = db.cursor()
               
        Sql_1 = "select * from table1"
        cursor.execute(Sql_1)
       
        Result_1 = cursor.fetchall() #使用fetchall可以获取多个元素
        print(Result_1)
        print(type(Result_1))
       
        print("-" * 10)
       
        for Key_1 in Result_1: #自定义输出格式
                id = Key_1[0]
                name = Key_1[1]
                math = Key_1[2]
               
                date = Key_1[3]
                time = Key_1[4]

                print(f"id={id},姓名={name},数学成绩={math},日期={date},时间={time}")
                       
        db.commit() #把执行任务提交到数据库
        db.close()

def func_main():
        try:
                query_data()
        except Exception as e:
                print(f"输出失败,原因: {e}")

if __name__ == "__main__":

        func_main()


脚本运行的结果:
C:\Users\jacky\Desktop>python xx.py
((1, '李大杰', 18.0, datetime.datetime(2019, 9, 9, 0, 0), datetime.datetime(2019, 9, 9, 7, 9, 18)), (2, '范小冰', 28.0, datetime.datetime(2019, 10, 8, 0, 0), datetime.datetime(2019, 10, 8, 5, 6, 8)), (3, 'zhuohua', 38.5, datetime.datetime(2020, 2, 5, 0, 0), datetime.datetime(2020, 2, 5, 9, 6, 52)))
<class 'tuple'>
----------
id=1,姓名=李大杰,数学成绩=18.0,日期=2019-09-09 00:00:00,时间=2019-09-09 07:09:18
id=2,姓名=范小冰,数学成绩=28.0,日期=2019-10-08 00:00:00,时间=2019-10-08 05:06:08
id=3,姓名=zhuohua,数学成绩=38.5,日期=2020-02-05 00:00:00,时间=2020-02-05 09:06:52

C:\Users\jacky\Desktop>





######

例子六:
Win7客户端远程输出数据库中某个表里某条记录的脚本:

#coding=utf-8
import pymysql

def query_data():

        db = pymysql.connect("192.168.168.133", "zhuohua", "888", "data1",3306,charset="utf8")
        cursor = db.cursor()
               
        Sql_1 = "select * from table1"
        cursor.execute(Sql_1)
       
        Result_1 = cursor.fetchall()
        print(Result_1)
        print(type(Result_1))
       
        print("-" * 10)
        print(Result_1[0]) #元组的第一个元素,即第一条记录
       
        print(Result_1[0][1])
        print(type(Result_1[0][1]))
       
        print(Result_1[0][2])
        print(type(Result_1[0][2]))
       
        db.commit() #把执行任务提交到数据库
        db.close()

def func_main():
        try:
                query_data()
        except Exception as e:
                print(f"输出失败,原因: {e}")

if __name__ == "__main__":

        func_main()


脚本运行的结果:
C:\Users\jacky\Desktop>python xx.py
((1, '李大杰', 18.0, datetime.datetime(2019, 9, 9, 0, 0), datetime.datetime(2019, 9, 9, 7, 9, 18)), (2, '范小冰', 28.0, datetime.datetime(2019, 10, 8, 0, 0), datetime.datetime(2019, 10, 8, 5, 6, 8)), (3, 'zhuohua', 38.5, datetime.datetime(2020, 2, 5, 0, 0), datetime.datetime(2020, 2, 5, 9, 6, 52)))
<class 'tuple'>
----------
(1, '李大杰', 18.0, datetime.datetime(2019, 9, 9, 0, 0), datetime.datetime(2019, 9, 9, 7, 9, 18))
李大杰
<class 'str'>
18.0
<class 'float'>

C:\Users\jacky\Desktop>





######

例子七:
Win7客户端远程输出数据库中某个表里符合指定条件的记录的脚本:

#coding=utf-8
import pymysql

def query_data():

        db = pymysql.connect("192.168.168.133", "zhuohua", "888", "data1",3306,charset="utf8")
        cursor = db.cursor()
               
        Sql_1 = "select * from table1 where math < 30"
        cursor.execute(Sql_1)
       
        Result_1 = cursor.fetchall()
        print(Result_1)
        print(type(Result_1))
       
        print("-" * 10)
       
        for Key_1 in Result_1: #自定义输出格式
                id = Key_1[0]
                name = Key_1[1]
                math = Key_1[2]
               
                date = str(Key_1[3])[0:10] #输出前面10个字符
                time = str(Key_1[4])[-8:] #输出最后8个字符

                print(f"id={id},姓名={name},数学成绩={math},日期={date},时间={time}")
       
        print("-" * 10)
        print(Result_1[1]) #元组的第二个元素,即第二条记录
       
        print(Result_1[1][0])
        print(type(Result_1[1][0]))
       
        print(Result_1[1][3])
        print(type(Result_1[1][3]))
       
        print(Result_1[1][4])
        print(type(Result_1[1][4]))
       
        db.commit() #把执行任务提交到数据库
        db.close()

def func_main():
        try:
                query_data()
        except Exception as e:
                print(f"输出失败,原因: {e}")

if __name__ == "__main__":

        func_main()


脚本运行的结果:
C:\Users\jacky\Desktop>python xx.py
((1, '李大杰', 18.0, datetime.datetime(2019, 9, 9, 0, 0), datetime.datetime(2019, 9, 9, 7, 9, 18)), (2, '范小冰', 28.0, datetime.datetime(2019, 10, 8, 0, 0), datetime.datetime(2019, 10, 8, 5, 6, 8)))
<class 'tuple'>
----------
id=1,姓名=李大杰,数学成绩=18.0,日期=2019-09-09,时间=07:09:18
id=2,姓名=范小冰,数学成绩=28.0,日期=2019-10-08,时间=05:06:08
----------
(2, '范小冰', 28.0, datetime.datetime(2019, 10, 8, 0, 0), datetime.datetime(2019, 10, 8, 5, 6, 8))
2
<class 'int'>
2019-10-08 00:00:00
<class 'datetime.datetime'>
2019-10-08 05:06:08
<class 'datetime.datetime'>

C:\Users\jacky\Desktop>





######

例子八:
Win7客户端远程输出根据关键字搜索出来的记录的脚本:

#coding=utf-8
import pymysql

def query_data():

        db = pymysql.connect("192.168.168.133", "zhuohua", "888", "data1",3306,charset="utf8")
        cursor = db.cursor()
               
        Sql_1 = "select * from table1 where name = 'Zhuohua'" #关键字不区分英文字母大小写
        cursor.execute(Sql_1)
       
        Result_1 = cursor.fetchall()
        print(Result_1)
        print(type(Result_1))
       
        print("-" * 10)
        Result_2 = Result_1[0] #元组的第一个元素,即第一条记录
       
        id = Result_2[0]
        name = Result_2[1]
        math = Result_2[2]
               
        date = str(Result_2[3])[0:10] #输出前面10个字符
        time = str(Result_2[4])[-8:] #输出最后8个字符

        print(f"id={id},姓名={name},数学成绩={math},日期={date},时间={time}")
               
        print("-" * 10)
        print(id)
        print(type(id))
        print(name)
        print(type(name))
       
        print("-" * 10)
        print(date)
        print(type(date))
        day = date.split("-")[2]
        print(day)
        print(type(day))
       
        print("-" * 10)
       
        print(time)
        print(type(time))
        hour = time.split(":")[0]
        print(hour)
        print(type(hour))
        hour_1 = int(hour)
        print(hour_1)
        print(type(hour_1))

        db.commit() #把执行任务提交到数据库
        db.close()

def func_main():
        try:
                query_data()
        except Exception as e:
                print(f"输出失败,原因: {e}")

if __name__ == "__main__":

        func_main()


脚本运行的结果:
C:\Users\jacky\Desktop>python xx.py
((3, 'zhuohua', 38.5, datetime.datetime(2020, 2, 5, 0, 0), datetime.datetime(2020, 2, 5, 9, 6, 52)),)
<class 'tuple'>
----------
id=3,姓名=zhuohua,数学成绩=38.5,日期=2020-02-05,时间=09:06:52
----------
3
<class 'int'>
zhuohua
<class 'str'>
----------
2020-02-05
<class 'str'>
05
<class 'str'>
----------
09:06:52
<class 'str'>
09
<class 'str'>
9
<class 'int'>

C:\Users\jacky\Desktop>





######

例子九:
Win7客户端远程输出根据聚合函数获得的数据的脚本:(结果只取一个值)

#coding=utf-8
import pymysql

def query_data():

        db = pymysql.connect("192.168.168.133", "zhuohua", "888", "data1",3306,charset="utf8")
        cursor = db.cursor()
               
        Sql_1 = "select min(math) from table1" #求字段math中的最小值
        cursor.execute(Sql_1)
       
        Result_1 = cursor.fetchone()
        print(Result_1)
        print(type(Result_1))
       
        print("-" * 10)
       
        print(Result_1[0])
        print(type(Result_1[0]))
                       
        db.commit() #把执行任务提交到数据库
        db.close()

def func_main():
        try:
                query_data()
        except Exception as e:
                print(f"输出失败,原因: {e}")

if __name__ == "__main__":

        func_main()


脚本运行的结果:
C:\Users\jacky\Desktop>python xx.py
(18.0,)
<class 'tuple'>
----------
18.0
<class 'float'>

C:\Users\jacky\Desktop>





######

例子十:
Win7客户端远程更改记录的脚本:

#coding=utf-8
import pymysql

def update_record():

        global db
        db = pymysql.connect("192.168.168.133", "zhuohua", "888", "data1",3306,charset="utf8")
        cursor = db.cursor()
       
        Sql_1 = "UPDATE table1 SET math = 66.5 WHERE name = 'zhuoHUA'" #关键字不区分英文字母大小写
        cursor.execute(Sql_1)

        Sql_2 = "UPDATE table1 SET math = 88 WHERE name like '__杰%'"
        cursor.execute(Sql_2)

        db.commit() #把执行任务提交到数据库;必须是所有SQL语句都执行成功才会提交
        db.close()
       
def func_main():
        try:
                update_record()
        except Exception as e:
                print(f"更改记录失败,原因: {e}")
                db.rollback() #如果发生错误就回滚
        else:
                print("更改记录成功。")
               
if __name__ == "__main__":

        func_main()


脚本运行的结果:
C:\Users\jacky\Desktop>python xx.py
更改记录成功。

C:\Users\jacky\Desktop>


使用SQLyog查看表数据:(更改记录成功)
图片5.png

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





######

例子十一:
Win7客户端远程删除记录的脚本:

#coding=utf-8
import pymysql

def delete_record():

        global db
        db = pymysql.connect("192.168.168.133", "zhuohua", "888", "data1",3306,charset="utf8")
        cursor = db.cursor()
       
        Sql_1 = "DELETE FROM table1 WHERE name like '%Zhuo%'" #关键字不区分英文字母大小写
        cursor.execute(Sql_1)

        Sql_2 = "DELETE FROM table1 WHERE name = '李大杰'"
        cursor.execute(Sql_2)

        db.commit() #把执行任务提交到数据库;必须是所有SQL语句都执行成功才会提交
        db.close()
       
def func_main():
        try:
                delete_record()
        except Exception as e:
                print(f"删除记录失败,原因: {e}")
                db.rollback() #如果发生错误就回滚
        else:
                print("删除记录成功。")
               
if __name__ == "__main__":

        func_main()


脚本运行的结果:
C:\Users\jacky\Desktop>python xx.py
删除记录成功。

C:\Users\jacky\Desktop>


使用SQLyog查看表数据:(删除记录成功)
图片6.png

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













######

例子十二:
MySQL服务器本地测试与数据库的连接的脚本:(D:\yy.py)

#coding=utf-8
import pymysql

def db_connect():

        #连接数据库;使用数据库用户root@localhost,即在服务器本地进行管理;库"mysql"是默认就存在的
        db = pymysql.connect("localhost", "root", "123", "mysql",3306,charset="utf8")
       
        cursor = db.cursor()
       
        Sql_1 = "SELECT VERSION();" #查看MySQL的版本信息
        cursor.execute(Sql_1)
       
        Result_1 = cursor.fetchone()

        print(Result_1[0]) #输出结果的第一项
        print(f"数据库连接成功,数据库的版本信息:{Result_1[0]}")
       
        db.commit() #把执行任务提交到数据库
        db.close()

def func_main():
        try:
                db_connect()
        except Exception as e:
                print(f"数据库连接失败,原因: {e}")

if __name__ == "__main__":
        func_main()


脚本运行的结果:
C:\Users\Administrator>python d:/yy.py
5.5.45
数据库连接成功,数据库的版本信息:5.5.45

C:\Users\Administrator>





######

例子十三:
MySQL服务器本地清空某个库中的某个表的脚本:

#coding=utf-8
import pymysql

def truncate_table():

        db = pymysql.connect("localhost", "root", "123", "data1",3306,charset="utf8")
        cursor = db.cursor()
       
        Sql_1 = "truncate table table1" #清空库data1中的表table1
        cursor.execute(Sql_1)
       
        db.commit() #把执行任务提交到数据库
        db.close()
       
        print ("清空表成功。")

def func_main():
        try:
                truncate_table()
        except Exception as e:
                print(f"清空表失败,原因: {e}")

if __name__ == "__main__":
        func_main()


脚本运行的结果:
C:\Users\Administrator>python d:/yy.py
清空表成功。

C:\Users\Administrator>


使用SQLyog查看表数据:(清空表成功)
图片7.png





######

例子十四:
MySQL服务器本地删除某个库中的某个表的脚本:

#coding=utf-8
import pymysql

def drop_table():

        db = pymysql.connect("localhost", "root", "123", "data1",3306,charset="utf8")
        cursor = db.cursor()
       
        Sql_1 = "DROP TABLE table1" #删除库data1中的表table1
        cursor.execute(Sql_1)
       
        db.commit() #把执行任务提交到数据库
        db.close()

def func_main():
        try:
                drop_table()
        except Exception as e:
                print(f"删除表失败,原因: {e}")
        else:
                print ("删除表成功。")
               
if __name__ == "__main__":

        func_main()


脚本运行的结果:(假如表存在时)
C:\Users\Administrator>python d:/yy.py
删除表成功。

C:\Users\Administrator>


脚本运行的结果:(假如表不存在时)
C:\Users\Administrator>python d:/yy.py
删除表失败,原因: (1051, "Unknown table 'table1'")

C:\Users\Administrator>


使用SQLyog查看表数据:(删除表成功)
图片8.png





######

例子十五:
MySQL服务器本地删除某个库的脚本:

#coding=utf-8
import pymysql

def drop_database():

        db = pymysql.connect("localhost", "root", "123", "mysql",3306,charset="utf8")
        cursor = db.cursor()
       
        Sql_1 = "drop database data1;" #删除库data1
        cursor.execute(Sql_1)
       
        db.commit() #把执行任务提交到数据库
        db.close()

def func_main():
        try:
                drop_database()
        except Exception as e:
                print(f"删除库data1失败,原因: {e}")
        else:
                print ("删除库data1成功。")
               
if __name__ == "__main__":
        func_main()


脚本运行的结果:(假如库data1存在时)
C:\Users\Administrator>python d:/yy.py
删除库data1成功。

C:\Users\Administrator>


脚本运行的结果:(假如库data1不存在时)
C:\Users\Administrator>python d:/yy.py
删除库data1失败,原因: (1008, "Can't drop database 'data1'; database doesn't exist")

C:\Users\Administrator>





相关文章:
split()函数
Python3脚本管理Linux下的MySQL

返回列表