python mssql get image bin_python实现mssql里点数据集到AutoCAD的文本转换
#!/usr/bin/env python
# -*- coding: cp936 -*-
'''
功能说明:
实现从supermap后台的mssql里点数据集到AutoCAD里文本型的转换。
要是改为多线程的效果可能会更好。但现在的处理量很小,用不着给自己找麻烦
2011-10-4~2011-10-5
TODO:程度里的try...except太多,有些可以改成with语句。
'''
__author__ = 'shifeng'
import pyodbc
import logging
import comtypes.client
import numbers
import array
import re
import ConfigParser
def getconnect(db_type=None,db_arg=None):
'''
sql server:
connector=pyodbc.connect('DRIVER={SQL SERVER};SERVER=LUOBO\SQLEXPRESS;DATABASE=chengguuo')
'''
if db_type in ('MSSQL','JET'):
try:
connector = pyodbc.connect(db_arg)
except :
logging.error("数据库连接错误!")
raise
return connector
def getdrawscript(f=None):
'''
如果给定文件名则打开该CAD文件。
如果没有给定文件名则认为待编辑的CAD文件已经打开。
'''
if not f:
try:
cad=comtypes.client.GetActiveObject('AutoCAD.Application') #这个可能有点问题
cad.Visible=False
drawingscript=cad.ActiveDocument
except :
logging.error("获得活动cad文件失败。请查看草稿文件是否已经打开,或请关闭除了草稿文件以外的所有cad文件。")
raise
else:
try:
cad=comtypes.client.CreateObject('AutoCAD.Application')
except :
logging.error("请确定本机上安装了autocad")
raise
try:
drawingscript=cad.Documents.Open(f)
except :
logging.error("cad文件打开失败。")
cad.Quit()
raise
return drawingscript
def getrows(sqlstring,connect=None,*args,**kargs):
'''
当返回大量记录时可以要占用大量内存空间
>>> sqlstring = 'SELECT SmX,SmY,name FROM SMDTV_93'
>>> connect = pyodbc.connect('DRIVER={SQL SERVER};SERVER=LUOBO\SQLEXPRESS;DATABASE=chengguuo')
>>> rows = getrows(sqlstring,connect)
>>> isinstance(rows,list)
True
>>> row=rows[1]
>>> isinstance(row[0],numbers.Real)
True
>>> isinstance(row[1],numbers.Real)
True
>>> isinstance(row[2],str)
True
'''
cursor=connect.cursor()
try:
cursor.execute(sqlstring)
rows = cursor.fetchall()
except :
logging.error("数据库进行sql查寻时出错")
raise
finally:
connect.close()
return rows # 返回引用,注意防止修改
def drawtext(x=None,y=None,text='什么都没有',draw=None,size=50):
'''
在cad里输入文字。
>>> drawtext(x=36395514.9324,y=3250445.33498,text=r'A1;T{H0.7x;S^3;}x',draw=getdrawscript('D:\Drawing11.dwg')) == 0
True
'''
if isinstance(x,numbers.Real) and isinstance(y,numbers.Real) and text: #无文字则不绘
point=array.array('d',[x,y,0])
try:
ms=draw.ModelSpace #draw必须没有关闭
#draw.ModelSpace.AddText(text,point,size) #单行文本
ms.AddMText(point,size,text) #多行文本
except:
logging.error("绘制文字出错!")
logging.error("nx:%sny:%sntext:%snpoint:%sndraw:%snms:s"%(x,y,text,point,draw,ms))
draw.Application.Quit()
raise
return 0
return 1
def removesharp(text):
'''
去掉text中的表示supermap标签专题图上下标的特殊符号
>>> removesharp("T#-3#=x")
'T3x'
>>> removesharp("J#-2#=S#+2")
'J2S2'
>>> removesharp("")
''
>>> removesharp(None)
''
'''
if text:
sharppattern=re.compile(r'#[+-=]')
modifiedtext=sharppattern.sub(r"",text,count=0)
else:
modifiedtext=""
return modifiedtext
def addchinesenote(test):
pass
def sharp2mtext(text):
'''
>>> text1 = 'T#-3#=x'
>>> text2 = 'J#-2#=S#+2'
>>> text3 = None
>>> sharp2mtext(text1) == '\A1;T{H0.7x;\\S^3;}x'
True
>>> #注意这是用的是repr()函数输出。
>>> print sharp2mtext(text1)
A1;T{H0.7x;\S^3;}x
>>> sharp2m
2000
text(text2) == '\A1;J{H0.7x;\S^2;}S{H0.7x;\S2^;}'
True
>>> sharp2mtext(text3) == ''
True
'''
if not text:
return ''
else:
ws=text.split('#')
logging.info(ws)
ws_conved=[]
for w in ws[1:]:
w_tem=''
if w[0] == '+':
w_tem = r'{H0.7x;S' + w[1:] + r'^;}'
elif w[0] == '-':
w_tem = r'{H0.7x;S^' + w[1:] + r';}'
elif w[0] == '=':
w_tem = w[1:]
ws_conved.append(w_tem)
text_conved = r'A1;'+ws[0]+''.join(ws_conved)
return text_conved
def main(*args,**kargs):
'''
>>> #main(filename="D:\Drawing1.dwg",sqlstring="SELECT SmX,SmY,name FROM SMDTV_93")
0
>>> # main(filename="D:\Drawing2.dwg",sqlstring="SELECT SmX,SmY,name FROM SMDTV_93") 失败,由于Drawing2.dwg还不存在
>>> # 0
>>> config = ConfigParser.ConfigParser()
>>> config.read('dot2text.cfg')
['dot2text.cfg']
>>> connectstring = config.get('APPLICATION','connectstring')
>>> connectstring='DRIVER={SQL SERVER};SERVER=LUOBO\SQLEXPRESS;DATABASE=chengguuo'
>>> filename = config.get('APPLICATION','outputfile')
>>> sqlstring = config.get('APPLICATION','sqlstring')
>>> dbtype =config.get('APPLICATION','dbtype')
>>> main(filename=filename,sqlstring=sqlstring,dbtype=dbtype,connectstring=connectstring)
0
'''
try:
filename=kargs['filename']
sqlstring=kargs['sqlstring']
dbtype=kargs['dbtype']
connectstring=kargs['connectstring']
except:
logging.info("请给出正确的关键字参数")
return 1
if not filename:
draw=getdrawscript()
else:
draw=getdrawscript(filename)
try:
layer=draw.Layers.Add("DOT_2_TEXT") #新增图层
draw.ActiveLayer=layer
except :
logging.error("添加新图层出错")
draw.Application.Quit()
raise
# 这里出过大bug,主要是异常的处理
#try:
# dbconnect=getconnect(db_type=dbtype,db_arg=connectstring)
#except:
# raise
#finally:
# draw.Application.Quit()
try:
dbconnect=getconnect(db_type=dbtype,db_arg=connectstring)
except:
draw.Application.Quit()
raise
try:
rows=getrows(sqlstring,dbconnect)
except:
return 1
try:
for row in rows:
#drawtext(x=row[0],y=row[1],text=removesharp(row[2]),draw=draw)
drawtext(x=row[0],y=row[1],text=sharp2mtext(row[2]),draw=draw)
draw.save()
except:
logging.error("主函数中的drawtext操作出错")
logging.error("drawtext:nrow[0]:%snrow[1]:%snrow[2]:%sn"%(row[0],row[1],row[2]))
return 1
draw.Application.Quit()
return 0
if __name__ == "__main__":
#filename = raw_input("请输入文件名n") # D:Drawing1.dwg
#sqlstring = raw_input("***请不要误操作!***n请输入查询语句。n") # select SmX,SmY,name from SMDTV93
config = ConfigParser.ConfigParser()
config.read('dot2text.cfg')
connectstring = config.get('APPLICATION','connectstring')
filename = config.get('APPLICATION','outputfile')
sqlstring = config.get('APPLICATION','sqlstring')
dbtype =config.get('APPLICATION','dbtype')
main(filename=filename,sqlstring=sqlstring,dbtype=dbtype,connectstring=connectstring)
[APPLICATION]
connectstring =DRIVER={SQL SERVER};SERVER=LUOBOSQLEXPRESS;DATABASE=chengguo
outputfile =D:Drawing1.dwg
dbtype =MSSQL
sqlstring =SELECT SmX,SmY,name from SMDTV_93
python mssql get image bin_python实现mssql里点数据集到AutoCAD的文本转换相关推荐
- python打开excel数据库_使用python导入excel文件中的mssql数据库数据
我试图用python导入excel文件中的mssql数据库数据.我的数据在excel表格中的顺序不正确.e. g它显示第1列数据,然后是第3列,第2列,然后是第4列,依此类推. 我使用以下脚本:imp ...
- php连mssql 中文乱码,PHP连接MSSQL显示中文时为乱码_PHP教程
PHP连接MSSQL显示中文时为乱码 PHP连接MSSQL显示中文时为乱码主要是因为编码问题了,我们只要懂得一对于数据库与页面的编码统一处理就可以解决了,下面一起来看看下文. 因为一直在使用 wind ...
- notepad怎么设置python为环境变量_在Notepad++里配置python环境
1.首先在语言里选择Python 2.然后点击运行,在弹出的对话框里输入: cmd /k cd /d "$(CURRENT_DIRECTORY)" & python &qu ...
- python实现AES加解密文档里英文字符串
python实现AES加解密文档里英文文章 AES加解密文档里英文字符串 英文文档中也包含了空格与回车符 加密过程 首先读取文件中的内容 将文档中的内容读取,然后将其赋予你申请的变量 在我的实验中我的 ...
- 用python统计王者荣耀里所有英雄的技能描述文本量并排序
目标 对于我来说,学习新英雄的第一件事便是查看其技能描述.因此,我相信技能描述的文本量对于一个英雄的上手难度有着不小的影响. 因此,我希望能统计出王者荣耀里所有英雄的技能描述文本量,并对其排序,这样也 ...
- python唐诗分析综合_Python利器之胎教《唐诗三百首》文本分析
事情是这样的,你们听我讲: 有一天,孕妈妈在家庭群里对准爸爸说,在某猫上买本<唐诗三百首>吧,每天给宝宝读一首唐诗,作为胎教.有图有真相: 作为好吃懒做的准爸爸,听到这个消息的瞬间,表情是 ...
- 【Python自然语言处理】读书笔记:第三章:处理原始文本
本章原文链接:https://usyiyi.github.io/nlp-py-2e-zh/3.html 3 处理原始文本 import nltk, re, pprint from nltk impor ...
- 深度学习入门-基于Python的理论入门与实现源代码加mnist数据集下载推荐
深度学习入门-基于Python的理论入门与实现源代码加mnist数据集下载推荐 书籍封面 1-图灵网站下载 书里也说了,可以图灵网站下载https://www.ituring.com.cn/book/ ...
- python字典(dict)+常用方法操作+列表、元组、集合、字典的互相转换
python字典(dict)+常用方法操作+列表.元组.集合.字典的互相转换 字典也是 Python 提供的一种常用的数据结构,它用于存放具有映射关系的数据. 为了保存具有映射关系的数据,Python ...
- python数据挖掘课程】二十一.朴素贝叶斯分类器详解及中文文本舆情分析
#2018-04-06 13:52:30 April Friday the 14 week, the 096 day SZ SSMR python数据挖掘课程]二十一.朴素贝叶斯分类器详解及中文文本舆 ...
最新文章
- linkedlist(c语言_简单实现)
- 如何更改计算机性能,如何修改注册表优化电脑性能 修改注册表优化电脑性能方法...
- iphone开机白苹果_摔过的iPhone,手机不开机、白苹果、听筒无声,多重问题一次搞定...
- 转:asp.net 负载平衡-Session相关
- 修改so_货代、海运操作、船务操作还分不清?船公司SO文件看不懂?
- 停止坐井观天,是时候让“我个人认为”见鬼去了!
- Memcached未授权访问漏洞记录(CVE-2013-7239、危害级别全版本、端口:11211)
- window下用主机名登录MySQL数据库出现报错解决方案
- PLSQL中文显示乱码
- 辩证的看DIV+CSS与TABLE
- 二重指针、二维数组及二者如何进行赋值
- Spring源码之bean的属性填充populateBean方法解读
- 数学建模系列--灰色关联分析
- 局域网内两台电脑无法共享文件问题
- 2018,我的这一年
- Pycharm 更换皮肤和壁纸
- 一个可用来记录Isilon各个节点的CPU,网络,磁盘性能的命令
- 还在谈论云计算吗?算力网络来啦!!!
- 动物miRNA靶基因本地预测(三)—— 靶基因预测与结果分析
- C - C语言实验——一元二次方程Ⅰ