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

文章目录

      • 一、前言
      • 二、测试环境搭建-sql server数据库搭建与还原
        • 2.1 sql server 2019搭建
        • 2.2 测试数据sql文件下载与还原数据库
      • 三、脚本实现
      • 四、总结

一、前言

  当数据库中的库表太多想查的时候,用管理工具查看太麻烦了,直接用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 数据库,在数据库鼠标右键点击还原数据库。

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

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

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

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

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

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

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

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

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

到达这一步,恭喜你已经还原成功。
python实战-连接SQL Server导出所有数据库、表的前一百条数据(内含源码)_第7张图片

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

三、脚本实现

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)

执行效果:

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

四、总结

  在遇到重复的工作时,可是思考这些重复的工作是否可以编程的思路去思解决,这样能大大简化了工作量,提升工作效率,提升技术能力,加油少年!微信公众号搜索艺说IT学习更多实战内容。
python实战-连接SQL Server导出所有数据库、表的前一百条数据(内含源码)_第11张图片

你可能感兴趣的:(#,python实战,数据库,python,开发语言)