遇到一个尴尬的问题,SSMS的GridView对于大字段的(varchar(max),text之类的),支持不太友好的,
超过8000个长度之外的字符,SSMS的表格是显示不出来的(当然也就看不到了),也是无法直接导出来的(超过8000个之外的字符的)
这种问题在别人遇到来求助的时候,是不可忍受的,于是快速用Python写了一个导出数据到Excel的功能,
最主要的是可以导出大字段的内容,且方便简洁,人畜无害,绿色环保,不太喜欢SSMS那种下一步下一步……的操作。那些在SSMS中无法显示出来的字段,这下可以显出原形了。

1,必选参数是服务器地址和sql语句,如果sql语句没有带库名的话,那么必须传入数据库的名字,否则默认是master库,因此sql尽量带库名吧
2,导出路径是C:\Windows\Temp\,导出完成后自动打开,方便查看,另存
3,根据sql语句,导出完成的查询结果,第一行是字段名,其余是查询结果
4,依赖于xlsxwriter这个包
5,没有太严格的参数校验以及数据库账号密码支持,有需要的自己改造

import os
import re
import time
import pymssql
import xlsxwriter
import argparse def get_data_from_db(host='127.0.0.1',server='mssql',port=1433,database='master',sql_stament=''):
conn = pymssql.connect(host=host, server=server,port=port, database=database,as_dict=True, autocommit=True)
cursor = conn.cursor()
# 简单的判断,别尼玛执行了truncate啥的
if len(sql_statment)<6 or not (re.match(r'^select',sql_statment.lstrip())):
print('sql statment is error,exit……')
exit(1)
try:
cursor.execute(sql_stament)
result = cursor.fetchall()
except:
raise
finally:
cursor.close()
conn.close()
return result def export_to_excel(result):
current_time = time.strftime("%Y%m%d%H%M%S", time.localtime())
workbook = xlsxwriter.Workbook('C:\\Windows\\Temp\\'+current_time+'_temp.xlsx')
worksheet = workbook.add_worksheet("sheet1")
# head row
col = 0
for key in result[0].keys():
worksheet.write(0, col, key)
col = col+1
# data row
row = 1
col = 0
for dict in result:
for key in dict:
worksheet.write(row, col, str(dict[key]))
col = col + 1
col = 0
row += 1
workbook.close()
os.startfile('C:\\Windows\\Temp\\'+current_time+'_temp.xlsx') if __name__ == "__main__":
parser = argparse.ArgumentParser()
parser.add_argument("--host",required=True, type=str,help="host name or ip")
parser.add_argument("--db",required=False, type=str,help="database name")
parser.add_argument("--sql", required=True, type=str, help="sql statment")
args = parser.parse_args()
host = args.host
database = args.db
if not database:
database='master'
sql_statment = args.sql
print('executing sql……')
result = get_data_from_db(host = host,database = database,sql_stament =sql_statment)
print('exporting data……')
export_to_excel(result) # example
# python export_data_to_excel.py --host "127.0.0.1" --sql "select * from tempdb.dbo.Test"

在10W级别以下,速度还是可以的,这是个demo

python快速导出sql语句(mssql)的查询结果到Excel,解决SSMS无法加载大字段的问题的更多相关文章

  1. 使用传入的总记录数实现一条sql语句完成分页查询

    使用传入的总记录数实现一条sql语句完成分页查询     问题:在传统的分页查询的实现中不可避免的需要两条sql语句,一条用于查询数据一条用于查询总记录数.如下面的实际代码所示: Img1 当然如果使 ...

  2. 利用excel办公软件快速拼凑sql语句

    日常工作中经常会收到excel整理好的部门或者人员等数据信息并需要批量更新或者插入到数据库中,常用的办法有导入.脚本拼凑执行等,今天我介绍直接使用excel快速拼凑sql语句的方法 1.update批 ...

  3. PowerDesigner 创建表格及导出SQL语句

    PowerDesigner 创建表格及导出SQL语句   目的:提高数据库创建表格效率 测试数据库:orcale 1.新建物理模型. 右键点击workplace,new一个物理模型并指定数据库. 2. ...

  4. mongodb 跟踪SQL语句及慢查询收集

    有个需求:跟踪mongodb的SQL语句及慢查询收集 第一步:通过mongodb自带函数可以查看在一段时间内DML语句的运行次数. 在bin目录下面运行  ./mongostat -port 端口号  ...

  5. [转]在Excel中使用SQL语句实现精确查询

    本文转自:http://blog.sina.com.cn/s/blog_5fc375650102e1g5.html 今天在微博上看到@数据分析精选 分享的一篇文章,是关于<在Excel中使用SQ ...

  6. 利用powerdesigner创建表模型后导出sql语句方法,以及报错 Generation aborted due to errors detected during the verification of the model.的解决办法

    今天用powerdesigner建了表模型,下面先说一下导出sql语句的步骤. 1.选项 2. 然后就报错了,下面说解决办法,很简单. 你没看错,把模型检查的√去掉就行了~~ 导出表名不带双引号的设置 ...

  7. 使用excel中的数据快速生成sql语句

    在小公司的话,总是会有要开发去导入历史数据(数据从旧系统迁移到新系统上)的时候.这个时候,现场实施或客户会给你一份EXCEL文档,里面包含了一些别的系统上的历史数据,然后就让你导入到现在的系统上面去. ...

  8. 在JDBC中实现SQL语句的模糊查询

    在JDBC中实现SQL语句的模糊查询 在大多数情况下我们可以在JDBC中写入sql语句通过占位符的方式来直接查询,但是如果要进行模糊查询,需要转义字符才能够正常查询. sql语句: select * ...

  9. Python导出sql语句结果到Excel

    本文档是因为每周需要统计线上数据库中客户新增资源,手动执行实在是麻烦,就写了个脚本导出到Excel,顺便发一封邮件. (当然这不是线上的真实脚本,不过根据个人需求稍微修改下,还是可以直接用的.拿去不谢 ...

随机推荐

  1. LightOJ1355 Game Of CS(green 博弈)

    Jolly and Emily are two bees studying in Computer Science. Unlike other bees they are fond of playin ...

  2. MySQL面试总结

    MySQL面试总结 # MySQL的存储引擎 `MyISAM`(默认表类型):非事务的存储引擎,基于传统的`ISAM`(有索引的顺序访问方法)类型,是存储记录和文件的标准方法,不是事务安全,不支持外键 ...

  3. centos与内核版本对应关系

    centos是基于redhat的二次开发,redhat会封装不同版本的内核,有时候,我们需要指定内核版本的centos,下面两个网站或许对你有帮助: https://access.redhat.com ...

  4. Python3 函数基础2

    目录 可变长参数 可变长形参: *args 可变长实参: *容器类 可变长形参: **kwargs 可变长实参: **字典 函数对象 引用 当做容器类型元素 当做参数传给一个函数 当做函数的返回值 函 ...

  5. Day 03 Python 基础

    目录 Pycharm 的使用 设置 快捷键 变量 什么是变量 定义变量 变量名的命名规则 变量名的两种命名方式 注释 快捷键(快速注释) 单行注释 多行注释 注释的作用 Turtle库的使用 Pych ...

  6. Docker下载tomcat

    命令 下载tomcat docker pull tomcat //默认是latest版本具体可以到 hub.docker.com上查询 //如果想下其他版本以9.0.16示例那么: docker pu ...

  7. cordova 打包出现transformClassesWithDexForDebug一类错误的解决办法

    Cordova在添加了插件后,或者是本身文件很多,文件很大的情况下打包时候可能会出现 transformClassesWithDexForDebug或者transformClassesWithDexF ...

  8. svn下载多模块及依赖框架的项目

    安装TortoiseSVN之后,在新建的文件里右键svn checkout 输入公司配给的svn地址.用户名.密码 需要分模块下载的项目在地址后面的三个...中选择需要下载的项目,点击OK等待下载完成

  9. 《Java基础知识》Java Lambda表达式

    接触Lambda表达式的时候,第一感觉就是,这个是啥?我居然看不懂,于是开始寻找资料,必须弄懂它. 先来看一个案例: @FunctionalInterface public interface MyL ...

  10. [ASP.NET Core 3框架揭秘] 依赖注入[6]:服务注册

    通过<利用容器提供服务>我们知道作为依赖注入容器的IServiceProvider对象是通过调用IServiceCollection接口的扩展方法BuildServiceProvider创 ...