返回列表 发帖

Python3脚本管理MSSQL2014

笺注:这是在 使用Navicat远程管理MSSQL2014 的基础上进行的。


创建了一个库data1:
图片1.png
2022-4-2 12:27


创建了一个数据库用户zhuohua,对库data1有完全控制的权限:
图片2.png
2022-4-2 12:28




############

Win7客户端连接公网安装第三方库(pyodbc):(可以指定软件的版本)
pip3 install pyodbc==4.0.30 -i http://mirrors.aliyun.com/pypi/simple --trusted-host=mirrors.aliyun.com
图片1.png
2022-5-6 15:23


备注:32位系统会自动安装32位的软件包;64位系统会自动安装64位的软件包。

由此还可以获得软件包的下载地址:(需要另外手动下载软件包)
Downloading http://mirrors.aliyun.com/pypi/packages/1a/71/3782413f9cb7088017b6b842ff59a1329f84da2108f0081fd27d1be6a5f6/pyodbc-4.0.30-cp36-cp36m-win32.whl (68kB)

注释:这是32位软件包。


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





######

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

#coding=utf-8
import pyodbc

def db_connect():

        db = pyodbc.connect(DRIVER='{SQL Server}',SERVER='192.168.168.133',PORT='1433',DATABASE='master',UID='sa',PWD='Jacky888') #连接数据库;MSSQL服务器的IP地址(192.168.168.133)、端口号(1433)、其中一个库的名称(master)、用户名(sa)、用户密码

        cursor = db.cursor()
        Sql_1 = "select @@VERSION as sql_server_v" #查询MSSQL的版本信息
        cursor.execute(Sql_1) #执行SQL语句
       
        Result_1 = cursor.fetchone() #使用fetchone只能获取一个元素
        print(Result_1)
        print(type(Result_1))
       
        print("-" * 10)
        print("数据库连接成功,数据库的版本信息:")
        print(Result_1[0]) #输出结果的第一项
       
        print("-" * 10)
        Result_2 = Result_1[0][0:25] #输出结果的第一项前面25个字符
        print(Result_2)
       
        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
('Microsoft SQL Server 2014 - 12.0.2000.8 (X64) \n\tFeb 20 2014 20:04:26 \n\tCopyright (c) Microsoft Corporation\n\tEnterprise Edition (64-bit) on Windows NT 6.3 <X64> (Build 9600: ) (Hypervisor)\n', )
<class 'pyodbc.Row'>
----------
数据库连接成功,数据库的版本信息:
Microsoft SQL Server 2014 - 12.0.2000.8 (X64)
        Feb 20 2014 20:04:26
        Copyright (c) Microsoft Corporation
        Enterprise Edition (64-bit) on Windows NT 6.3 <X64> (Build 9600: ) (Hypervisor)

----------
Microsoft SQL Server 2014

C:\Users\jacky\Desktop>





######

例子二:
Win7客户端远程测试与数据库的连接的脚本:

#coding=utf-8
import pyodbc

def db_connect():

        db = pyodbc.connect(DRIVER='{SQL Server}',SERVER='192.168.168.133',PORT='1433',DATABASE='data1',UID='zhuohua',PWD='123') #连接数据库;MSSQL服务器的IP地址(192.168.168.133)、端口号(1433)、其中一个库的名称(data1)、用户名(zhuohua)、用户密码

        cursor = db.cursor()
        Sql_1 = "select @@VERSION as sql_server_v;" #查询MSSQL的版本信息
        cursor.execute(Sql_1) #执行SQL语句
       
        print("数据库连接成功,数据库的版本信息:")
        Result_1 = cursor.fetchone()
        Result_2 = Result_1[0][0:25] #输出结果的第一项前面25个字符
        print(Result_2)
       
        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
数据库连接成功,数据库的版本信息:
Microsoft SQL Server 2014


C:\Users\jacky\Desktop>





######

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

#coding=utf-8
import pyodbc

def create_table():

        db = pyodbc.connect(DRIVER='{SQL Server}',SERVER='192.168.168.133',PORT='1433',DATABASE='data1',UID='zhuohua',PWD='123')
        cursor = db.cursor()

        Sql_1 = "create table t_1 (id int primary key not null identity (1,1),name nvarchar(50),math float,date datetime,time datetime)" #这是在库data1中创建表t_1;字段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>


使用Navicat查看库data1的表t_1的表结构:
图片2.png
2022-5-6 15:27






######

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

#coding=utf-8
import pyodbc

def insert_record():
        global db
        db = pyodbc.connect(DRIVER='{SQL Server}',SERVER='192.168.168.133',PORT='1433',DATABASE='data1',UID='zhuohua',PWD='123')
        cursor = db.cursor()
       

        Sql_1 = "INSERT INTO t_1(name,math,date,time)" \
        " VALUES('李大杰',18,'2019-9-9','2019-9-9 7:9:18')" #这是往库data1的表t_1中插入记录
               
        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>


使用Navicat查看库data1的表t_1的表数据:
use data1;
select * from t_1;
图片3.png
2022-5-6 15:28






######

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

#coding=utf-8
import pyodbc

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 = pyodbc.connect(DRIVER='{SQL Server}',SERVER='192.168.168.133',PORT='1433',DATABASE='data1',UID='zhuohua',PWD='123')
        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 t_1(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 t_1(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>


使用Navicat查看库data1的表t_1的表数据:
图片4.png
2022-5-6 15:29






######

例子六:
Win7客户端远程输出库data1中表t_1的所有记录的脚本:

#coding=utf-8
import pyodbc

def query_data():
        db = pyodbc.connect(DRIVER='{SQL Server}',SERVER='192.168.168.133',PORT='1433',DATABASE='data1',UID='zhuohua',PWD='123')
        cursor = db.cursor()
               
        Sql_1 = "select * from t_1"
        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, 4, 2, 0, 0), datetime.datetime(2020, 4, 2, 9, 44, 21))]
<class 'list'>
----------
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-04-02 00:00:00,时间=2020-04-02 09:44:21

C:\Users\jacky\Desktop>





######

例子七:
Win7客户端把输出结果写入(覆盖)到本地文件的脚本:

#coding=utf-8
import pyodbc

def query_data():
        db = pyodbc.connect(DRIVER='{SQL Server}',SERVER='192.168.168.133',PORT='1433',DATABASE='data1',UID='zhuohua',PWD='123')
        cursor = db.cursor()
               
        Sql_1 = "select * from t_1"
        cursor.execute(Sql_1)
       
        Result_1 = cursor.fetchall()
       
        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.txt

C:\Users\jacky\Desktop>


文件1.txt的内容:
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-04-02 00:00:00,时间=2020-04-02 09:44:21






######

例子八:
Win7客户端远程清空库data1中表t_1的所有记录的脚本:

#coding=utf-8
import pyodbc

def truncate_table():
        db = pyodbc.connect(DRIVER='{SQL Server}',SERVER='192.168.168.133',PORT='1433',DATABASE='data1',UID='zhuohua',PWD='123')
        cursor = db.cursor()
       
        Sql_1 = "truncate table t_1" #清空后,字段“id”会从1重新开始
        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\jacky\Desktop>python xx.py
清空表成功。

C:\Users\jacky\Desktop>


使用Navicat查看库data1的表t_1的表数据:
图片5.png
2022-5-6 15:31






######

例子九:
Win7客户端把本地文件里的所有记录添加到数据库中的某个表的脚本:

#coding=utf-8
import pyodbc

def func1():
        Path_1 = "./1.txt"
        f_name = open(Path_1,'r')
        Result_1 = f_name.readlines() #输出结果为列表,包含换行符
        f_name.close()
       
        print(Result_1)
        print(type(Result_1))
       
        insert_record(Result_1)  

def insert_record(Result_1):
        db = pyodbc.connect(DRIVER='{SQL Server}',SERVER='192.168.168.133',PORT='1433',DATABASE='data1',UID='zhuohua',PWD='123')
        cursor = db.cursor()

        for Key_1 in Result_1:
                #字段id为主键、标识符列,会自动增长,不用写
                name = Key_1.split(',')[1][3:] #去掉前面3个字符
                math = float(Key_1.split(',')[2][5:]) #去掉前面5个字符,再转换为浮点数
                date = Key_1.split(',')[3][3:] #去掉前面3个字符
                time = Key_1.split(',')[4][3:].rstrip('\n') #去掉前面3个字符,再去除右边的换行符
               
                Sql_1 = f"INSERT INTO t_1(name,math,date,time) VALUES('{name}',{math},'{date}','{time}')"
                cursor.execute(Sql_1)
               
        db.commit() #把执行任务提交到数据库
        db.close()
               
if __name__ == "__main__":

        func1()


脚本运行的结果:
C:\Users\jacky\Desktop>python xx.py
['id=1,姓名=李大杰,数学成绩=18.0,日期=2019-09-09 00:00:00,时间=2019-09-09 07:09:18\n', 'id=2,姓名=范小冰,数学成绩=28.0,日期=2019-10-08 00:00:00,时间=2019-10-08 05:06:08\n', 'id=3,姓名=zhuohua,数学成绩=38.5,日期=2020-04-02 00:00:00,时间=2020-04-02 09:44:21\n']
<class 'list'>

C:\Users\jacky\Desktop>


使用Navicat查看库data1的表t_1的表数据:
图片6.png
2022-5-6 15:32






######

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

#coding=utf-8
import pyodbc

def query_data():

        db = pyodbc.connect(DRIVER='{SQL Server}',SERVER='192.168.168.133',PORT='1433',DATABASE='data1',UID='zhuohua',PWD='123')
        cursor = db.cursor()
               
        Sql_1 = "select * from t_1"
        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, 4, 2, 0, 0), datetime.datetime(2020, 4, 2, 9, 44, 21))]
<class 'list'>
----------
(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 pyodbc

def query_data():

        db = pyodbc.connect(DRIVER='{SQL Server}',SERVER='192.168.168.133',PORT='1433',DATABASE='data1',UID='zhuohua',PWD='123')
        cursor = db.cursor()
               
        Sql_1 = "select * from t_1 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 'list'>
----------
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 pyodbc

def query_data():

        db = pyodbc.connect(DRIVER='{SQL Server}',SERVER='192.168.168.133',PORT='1433',DATABASE='data1',UID='zhuohua',PWD='123')
        cursor = db.cursor()
               
        Sql_1 = "select * from t_1 where name = 'Zhuohua'" #关键字不区分英文字母大小写
        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(date)
        print(type(date))
        print(time)
        print(type(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
[(3, 'zhuohua', 38.5, datetime.datetime(2020, 4, 2, 0, 0), datetime.datetime(2020, 4, 2, 9, 44, 21))]
<class 'list'>
----------
id=3,姓名=zhuohua,数学成绩=38.5,日期=2020-04-02,时间=09:44:21
----------
2020-04-02
<class 'str'>
09:44:21
<class 'str'>

C:\Users\jacky\Desktop>





######

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

#coding=utf-8
import pyodbc

def query_data():

        db = pyodbc.connect(DRIVER='{SQL Server}',SERVER='192.168.168.133',PORT='1433',DATABASE='data1',UID='zhuohua',PWD='123')
        cursor = db.cursor()
               
        Sql_1 = "select max(math) from t_1" #查询字段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
(38.5, )
<class 'pyodbc.Row'>
----------
38.5
<class 'float'>


C:\Users\jacky\Desktop>





######

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

#coding=utf-8
import pyodbc

def update_record():

        global db
        db = pyodbc.connect(DRIVER='{SQL Server}',SERVER='192.168.168.133',PORT='1433',DATABASE='data1',UID='zhuohua',PWD='123')
        cursor = db.cursor()
       
        Sql_1 = "UPDATE t_1 SET math = 66.5 WHERE name = 'zhuoHUA'" #关键字不区分英文字母大小写
        cursor.execute(Sql_1)

        Sql_2 = "UPDATE t_1 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>


使用Navicat查看库data1的表t_1的表数据:
图片7.png
2022-5-6 15:37


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





######

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

#coding=utf-8
import pyodbc

def update_record():

        global db
        db = pyodbc.connect(DRIVER='{SQL Server}',SERVER='192.168.168.133',PORT='1433',DATABASE='data1',UID='zhuohua',PWD='123')
        cursor = db.cursor()
       
        Sql_1 = "UPDATE t_1 SET date = '2019-10-10' WHERE name = '李大杰'" #直接更改日期
        cursor.execute(Sql_1)

        Sql_2 = "UPDATE t_1 SET date = dateadd(YYYY,2,date) WHERE name like '范%'" #字段date加大2年
        cursor.execute(Sql_2)
       
        Sql_3 = "UPDATE t_1 SET time = dateadd(HH,-3,time) WHERE name like 'zhuo%'" #字段time减小3小时
        cursor.execute(Sql_3)

        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>


使用Navicat查看库data1的表t_1的表数据:
图片8.png
2022-5-6 15:38






######

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

#coding=utf-8
import pyodbc

def delete_record():

        global db
        db = pyodbc.connect(DRIVER='{SQL Server}',SERVER='192.168.168.133',PORT='1433',DATABASE='data1',UID='zhuohua',PWD='123')
        cursor = db.cursor()
       
        Sql_1 = "DELETE FROM t_1 WHERE name like '%Zhuo%'" #关键字不区分英文字母大小写
        cursor.execute(Sql_1)

        Sql_2 = "DELETE FROM t_1 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>


使用Navicat查看库data1的表t_1的表数据:
图片9.png
2022-5-6 15:39


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





######

Win7客户端卸载安装好的第三方库(pyodbc):
C:\Users\jacky\Desktop>pip3 uninstall pyodbc -y
Uninstalling pyodbc-4.0.30:
  Successfully uninstalled pyodbc-4.0.30


C:\Users\jacky\Desktop>



Win7客户端离线安装第三方库(pyodbc):(需要先手动下载软件包)
C:\Users\jacky\Desktop>pip3 install pyodbc-4.0.30-cp36-cp36m-win32.whl
Processing c:\users\jacky\desktop\pyodbc-4.0.30-cp36-cp36m-win32.whl
Installing collected packages: pyodbc
Successfully installed pyodbc-4.0.30


C:\Users\jacky\Desktop>













############

MSSQL服务器连接公网安装第三方库(pyodbc):
pip3 install pyodbc==4.0.30 -i http://mirrors.aliyun.com/pypi/simple --trusted-host=mirrors.aliyun.com
图片10.png
2022-5-6 15:40


备注:32位系统会自动安装32位的软件包;64位系统会自动安装64位的软件包。

由此还可以获得软件包的下载地址:(需要另外手动下载软件包)
Downloading http://mirrors.aliyun.com/pypi/packages/83/ad/b8b109c6ce0c5cd306218337fcd8226bff24e803f17aea339d1fe1e0070b/pyodbc-4.0.30-cp36-cp36m-win_amd64.whl (78kB)

注释:这是64位软件包。





######

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

#coding=utf-8
import pyodbc

def db_connect():

        db = pyodbc.connect(DRIVER='{SQL Server}',SERVER='127.0.0.1',PORT='1433',DATABASE='data1',UID='sa',PWD='Jacky888') #连接数据库;MSSQL服务器的本地回环地址(127.0.0.1

        cursor = db.cursor()
        Sql_1 = "select @@VERSION as sql_server_v;" #查询MSSQL的版本信息
        cursor.execute(Sql_1)
       
        Result_1 = cursor.fetchone()

        print("数据库连接成功,数据库的版本信息:")
       
        Result_2 = Result_1[0][0:25] #输出结果的第一项前面25个字符
        print(Result_2)
       
        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
数据库连接成功,数据库的版本信息:
Microsoft SQL Server 2014


C:\Users\Administrator>





######

例子十八:
服务器本地查询MSSQL的最大用户连接数的脚本:(结果只取一个值)

#coding=utf-8
import pyodbc

def query_data():

        db = pyodbc.connect(DRIVER='{SQL Server}',SERVER='127.0.0.1',PORT='1433',DATABASE='data1',UID='zhuohua',PWD='123')
        cursor = db.cursor()

        Sql_1 = "select @@MAX_CONNECTIONS as 最大用户连接数;" #查询MSSQL的最大用户连接数
        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\Administrator>python d:/yy.py
(32767, )
<class 'pyodbc.Row'>
----------
32767
<class 'int'>


C:\Users\Administrator>





######

例子十九:
服务器本地删除数据库中某个表的脚本:

#coding=utf-8
import pyodbc

def drop_table():
        db = pyodbc.connect(DRIVER='{SQL Server}',SERVER='127.0.0.1',PORT='1433',DATABASE='data1',UID='zhuohua',PWD='123')
        cursor = db.cursor()
       
        Sql_1 = "DROP TABLE t_1" #删除库data1的表t_1
        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
删除表失败,原因: ('42S02', "[42S02] [Microsoft][ODBC SQL Server Driver][SQL Server]无法对 表 't_1' 执行 删除,因为它不存在,或者您没有所需的权限。 (3701) (SQLExecDirectW)")

C:\Users\Administrator>


使用Navicat查看库data1的表t_1的表数据:
图片11.png
2022-5-6 15:42

注释:库data1的表t_1已经被删除。





######

MSSQL服务器卸载安装好的第三方库(pyodbc):
C:\Users\Administrator>pip3 uninstall pyodbc -y
Uninstalling pyodbc-4.0.30:
  Successfully uninstalled pyodbc-4.0.30


C:\Users\Administrator>



MSSQL服务器离线安装第三方库(pyodbc):(需要先手动下载软件包)
C:\Users\Administrator>pip3 install d:/pyodbc-4.0.30-cp36-cp36m-win_amd64.whl
Processing d:\pyodbc-4.0.30-cp36-cp36m-win_amd64.whl
Installing collected packages: pyodbc
Successfully installed pyodbc-4.0.30


C:\Users\Administrator>





相关文章:
Windows2012R2安装MSSQL2014
Windows2012R2安装Python3

MSSQL的SQL语句(日期时间)

CentOS8使用Python3脚本管理MSSQL2008R2
Python3脚本管理Access

Zabbix调用Python3脚本监控MSSQL
Python3脚本管理Linux下的MySQL

字符串的截取
datetime模块

返回列表