遇到一个尴尬的问题,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. iOS textView的使用总结

    转自:http://blog.csdn.net/zhaopenghhhhhh/article/details/11597887 在.h文件中声明: @interface ProtocolViewCon ...

  2. java 反射借助 asm 获取参数名称最优雅简单的方式

    背景说明 最近写反射相关的代码,想获取对应的参数名称,却发现没有特别好的方式. jdk7 及其以前,是无法通过反射获取参数名称的. jdk8 可以获取,但是要求指定 -parameter 启动参数,限 ...

  3. Python获取 bing 地图发布自己的 TMS 服务(二)解决海量瓦片存取问题

    金字塔结构的瓦片数量有多大 以目前互联网常用的WebMecator为例 第一层:4幅256*256影像瓦片(JPG或PNG等) 第二层:42 第三层:43 依次类推比如计算第1层至第18层的瓦片总数目 ...

  4. CodeForces-Round235D

      链接:http://codeforces.com/contest/401/problem/D 题意:给出一个数字num和m,问通过重新排列num中的各位数字中有多少个数(mod m)=0,直接枚举 ...

  5. Vue中兄弟组件间传值-(Bus/总线/发布订阅模式/观察者)

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  6. 深入理解Linux的I/O复用之epoll机制

    0.概述 通过本篇文章将了解到以下内容: I/O复用的定义和产生背景 Linux系统的I/O复用工具演进 epoll设计的基本构成 epoll高性能的底层实现 epoll的ET模式和LT模式 epol ...

  7. Nginx学习一路向西

    Nginx 学习一路向北 Java大猿帅成长手册,GitHub JavaEgg ,N线互联网开发必备技能兵器谱 1. Nginx简介 1.1 Nginx 概述 NGINX是一个免费.开源.高性能.轻量 ...

  8. CentOS7添加自定义脚本服务

    一.CentOS7添加自定义脚本服务说明 在CentOS7下,已经不再使用chkconfig命令管理系统开机自启动服务和条件自定义脚本服务了,而是使用管理unit的方式来控制开机自启动服务和添加自定义 ...

  9. 为什么要使用Unix时间戳

    概念: UNIX时间戳:Unix时间戳(英文为Unix epoch, Unix time, POSIX time 或 Unix timestamp) 是从1970年1月1日(UTC/GMT的午夜)开始 ...

  10. Spring IoC容器与应用上下文的设计与实现

    一.前言 写这篇博文的主要目的如下: 通过相关类和接口分析IoC容器到底长什么样. 阐述笔者对Spring上下文和容器的理解. 介绍重要的类辅助理解SpringBoot的启动流程. 二.Spring ...