python实战-连接SQL Server导出所有数据库、表的前一百条数据(内含源码)

一、前言

  当数据库中的库表太多想查的时候,用管理工具查看太麻烦了,直接用python导出成csv格式来看就比较方便了,看个人需求,实现思路可以参考。

二、测试环境搭建-sql server数据库搭建与还原

2.1 sql server 2019搭建

我这里使用docker进行搭建sql server 2019

# 官网文档
https://hub.docker.com/_/microsoft-mssql-server
# 获取镜像
docker pull mcr.microsoft.com/mssql/server:2019-latest
# 启动
docker run -e "ACCEPT_EULA=Y" -e "MSSQL_SA_PASSWORD=Qwert12345" -p 1433:1433 -d mcr.microsoft.com/mssql/server:2019-latest
# 宿主机传文件到容器
docker cp AdventureWorksDW2019.bak id:/tmp/AdventureWorksDW2019.bak
2.2 测试数据sql文件下载与还原数据库

这里使用微软官方提供的示例数据库(AdventureWorks sample databases)

https://learn.microsoft.com/zh-cn/sql/samples/adventureworks-install-configure?view=sql-server-ver16&tabs=ssms
不知道怎么下载示例数据库的小伙伴,我放到网盘里提供下载,微信搜索公众号艺说IT,回复mssql示例数据库,即可获取。

SSMS连接SQL Server 数据库,在数据库鼠标右键点击还原数据库。

在这里插入图片描述

选择设备,点击红框位置。

在这里插入图片描述

在这里插入图片描述

我这是使用docker搭建的sql server 2019所以路径是linux 路径,根据自己环境进行选择。

在这里插入图片描述

在这里插入图片描述

在选项中勾选覆盖现有数据库,取消勾选还原前进行结尾日志备份。

在这里插入图片描述

到达这一步,恭喜你🎉已经还原成功。
在这里插入图片描述

在这里插入图片描述

三、脚本实现

import pymssql
import os
import csv

host = '127.0.0.1'
user = 'sa'
password = 'Qwert12345'

try:
    conn = pymssql.connect(host=host,
                           user=user,
                           password=password,
                           port=1433,
                           charset='utf8')

    # 连接
    cursor = conn.cursor()

    # 查询所有库名
    sql = "SELECT Name FROM Master..SysDatabases WHERE Name NOT IN ('master', 'tempdb', 'model', 'msdb') ORDER BY Name;"
    cursor.execute(sql)
    databases = cursor.fetchall()
    for i in databases:
        dataName = str(list(i)[0])
        print("Databases :", dataName)
        # 创建数据库名称的目录
        mkdirPath = "c:/users/public/data/{}".format(dataName)
        os.makedirs(mkdirPath)
        # 获取对应库的表
        tablesSql = "use {};SELECT TABLE_SCHEMA,TABLE_NAME FROM information_schema.tables;".format(dataName)
        cursor.execute(tablesSql)
        tables = cursor.fetchall()
        print("table :", tables)
        for j in tables:
            tablesName = str(list(j)[0] + "." + list(j)[1])
            # 获取对应库中表的字段
            word = "use {};SELECT Name FROM SysColumns WHERE id=Object_Id('{}')".format(dataName, tablesName)
            cursor.execute(word)
            tableWord = [tableWord[0] for tableWord in cursor.fetchall()]
            print(tableWord)
            if tableWord:
                try:
                    field = ",".join(tableWord)
                    # 获取前一百条数据
                    topSql = "use {};SELECT top 100 {}  from {}".format(dataName, field, tablesName)
                    cursor.execute(topSql)
                    # 字段list
                    data = [data for data in cursor.fetchall()]
                    # 内容list
                    dataAll = []
                    for i in data:
                        dataAll.append(list(i))
                    # 写入csv
                    filename = "c:/users/public/data/{}/{}.csv".format(dataName, tablesName)
                    with open(filename, "w", encoding="utf-8") as f:
                        f_csv = csv.writer(f)
                        f_csv.writerow(tableWord)
                        f_csv.writerows(dataAll)
                        print("导出成功: ", filename)
                except Exception as e:
                    continue

except Exception as e:
    print("error:", e)

执行效果:

在这里插入图片描述在这里插入图片描述
在这里插入图片描述

四、总结

  在遇到重复的工作时,可是思考这些重复的工作是否可以编程的思路去思解决,这样能大大简化了工作量,提升工作效率,提升技术能力,加油少年!微信公众号搜索艺说IT学习更多实战内容。
在这里插入图片描述

  • 3
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值