
import pymssql import _mssql import time import os import ConfigParser import logging import win32api import win32con import threading import win32gui_struct import traceback import itertools import glob import uuid import decimal decimal.version uuid.ctypes.version _mssql.version try: import winxpgui as win32gui except ImportError: import win32gui from logging.handlers import RotatingFileHandler
cOnfig= ConfigParser.ConfigParser() config.readfp(open("DEC.INI")) mainfile = os.getcwd()
logging.basicConfig(level=logging.INFO) logging.info("读取 dec.ini 配置文件开始")
########数据库设置############# SQLSERVER1 =str(config.get("DATA", "SQLSERVER"))
USER = str(config.get("DATA", "USER"))
PASSWORD = str(config.get("DATA", "PASSWORD"))
DATABASE = str(config.get("DATA", "DATABASE"))
SQLSERVER = SQLSERVER1 USER = 'test' PASSWORD = 'test' DATABASE = 'test' g_COnn= None
datastr="""server="""+SQLSERVER +""", port='1433', user="""+USER+""", password="""+PASSWORD+""", database="""+DATABASE+""",charset='UTF-8'""" print datastr datastr="""host='127.0.0.1',port='1433',user='test',password='test',database='test',charset='UTF-8'""" print datastr g_COnn= None
LoggingLevel = "INFO" LoggingLevelTxt = '设置日志级别,日志级别大小关系为: CRITICAL > ERROR > WARNING(默认) > INFO > DEBUG > NOTSET' ##time.strftime('%Y-%m-%d',time.localtime()) #################################################################################################
Rthandler = RotatingFileHandler(os.path.join(mainfile, "dec1.log"), maxBytes=10 * 1024 * 1024, backupCount=3) Rthandler.setLevel(logging.INFO) # 此处级别设置无效 formatter = logging.Formatter('%(asctime)s: %(levelname)-8s %(message)s') Rthandler.setFormatter(formatter) logging.getLogger('').addHandler(Rthandler)
################################################################################################
def openDB():
global g_Conn print '准备打开数据库连接' print 'host=',SQLSERVER,"user=",USER,"password=",PASSWORD,"database=",DATABASE #g_COnn= pymssql.connect(host=SQLSERVER,port="1433",user=USER,password=PASSWORD,database=DATABASE,charset="UTF-8") #global g_Conn #pymssql.connect(host=SQLSERVER,user=USER,password=PASSWORD,database=DATABASE) #g_COnn= pymssql.connect(server=SQLSERVER,port='1433',user=USER,password=PASSWORD,database=DATABASE,charset="UTF-8") global datastr g_COnn= pymssql.connect(datastr) #g_COnn= pymssql.connect(server="127.0.0.1", port="1433", user="test", password="test", database="master",charset="UTF-8") #g_COnn=pymssql.connect(server=SQLSERVER,port="1433",user=USER,password=password,database=DATABASE,charset="UTF-8") #pymssql.connect(host=SQLSERVER,user=USER,password=PASSWORD,database=DATABASE,charset="UTF-8") # pymssql.connect(server="127.0.0.1",port="1433",user="test",password="test",database="master",charset="UTF-8") # pymssql.connect(host=SQLSERVER,user=USER,password=PASSWORD,database=DATABASE) def closeDB(): global g_Conn g_Conn.close()
def query(sql): try: openDB() global g_Conn print "dkai" cursor = g_Conn.cursor() ret = cursor.execute(sql) rows = cursor.fetchall() return rows except: raise Exception, 'query database has wrong' finally: closeDB()
def insert_many(sql, params): ''' 新增多条记录, params: sql:执行的 sql 语句 parmas:一个 list , listitem 为一个参数元组 ''' try: openDB() global g_Conn cursor = g_Conn.cursor() for param in params: sql_temp = sql % param cursor.execute(sql_temp) g_Conn.commit() return True except Exception, ex: print '%s:%s' % (Exception, ex) g_Conn.rollback() raise Exception, 'insert database has wrong' return False finally: closeDB()
def insert(sql): try: openDB() global g_Conn cursor = g_Conn.cursor() cursor.execute(sql) g_Conn.commit() except: g_Conn.rollback() raise Exception, 'query database has wrong' finally:
closeDB() SQLSYS_SEQUENCE_update = """update SYS_SEQUENCE Set NOW_VAL =NOW_VAL + 1 Where SEQ_CODE ='%s'""" SQLSYS_SEQUENCE_NOW_VAL = """SELECT NOW_VAL From SYS_SEQUENCE Whee SEQ_CODE ='%s'"""
def SYS_SEQUENCE_NOW_VAL_1(SEQ_CODE): SYS_SEQUENCE_NOW_VAL11 = insert(SQLSYS_SEQUENCE_update % (SEQ_CODE)) SYS_SEQUENCE_NOW_VAL1 = query(SQLSYS_SEQUENCE_NOW_VAL % (SEQ_CODE)) # print SQLSYS_SEQUENCE_NOW_VAL %(SEQ_CODE) while SYS_SEQUENCE_NOW_VAL1[0]: # print baa[0] NOW_VAL = SYS_SEQUENCE_NOW_VAL1[0][0][0] print NOW_VAL break; else: print "更新并获取 SYS_SEQUENCE 对应表 id 最大值错误!"
NOW_VAL = '' return NOW_VAL def SYS_SEQUENCE_NOW_VAL_2(SEQ_CODE): # 更新并获取 SYS_SEQUENCE 对应表 id 最大值! SYS_SEQUENCE_NOW_VAL1 = insert(SQLSYS_SEQUENCE_NOW_VAL % (SEQ_CODE)) print SQLSYS_SEQUENCE_NOW_VAL % (SEQ_CODE) while SYS_SEQUENCE_NOW_VAL1[0]: # print baa[0] NOW_VAL = SYS_SEQUENCE_NOW_VAL1[0][0][0] print NOW_VAL break; else: print "更新并获取 SYS_SEQUENCE 对应表 id 最大值错误!"
NOW_VAL = '' return NOW_VAL def plus(a, b): z = a + 1 c = b + 5 print a + b return c, z
def teststrRead(text): # logging.INFO() # logging.info(sqlOtheRpt %(instrid,instrno)) logging.info("开始连接数据库。。。。。。") print sql, (text) a = query(sql % (text)) print a # b = insert(sql_insert) # print ("tbale1:%s,"%(str(a[0]))) # print sql % (str(INSTR_ID),destinstr) return a
def runReadFile(a): pass
###############################
class SysTrayIcon(object): '''TODO''' QUIT = '退出解码' SPECIAL_ACTIOnS= [QUIT]
FIRST_ID = 1023 def __init__(self, icon, hover_text, menu_options, on_quit=None, default_menu_index=None, window_class_name=None, ): self.icon = icon self.hover_text = hover_text self.on_quit = on_quit menu_optiOns= menu_options + (('退出', None, self.QUIT),) self._next_action_id = self.FIRST_ID self.menu_actions_by_id = set() self.menu_optiOns= self._add_ids_to_menu_options(list(menu_options)) self.menu_actions_by_id = dict(self.menu_actions_by_id) del self._next_action_id self.default_menu_index = (default_menu_index or 0) self.window_class_name = window_class_name or "dec-1800i" message_map = {win32gui.RegisterWindowMessage("TaskbarCreated"): self.restart, win32con.WM_DESTROY: self.destroy, win32con.WM_COMMAND: self.command, win32con.WM_USER + 20: self.notify,} # Register the Window class. window_class = win32gui.WNDCLASS() hinst = window_class.hInstance = win32gui.GetModuleHandle(None) window_class.lpszClassName = self.window_class_name window_class.style = win32con.CS_VREDRAW | win32con.CS_HREDRAW; window_class.hCursor = win32gui.LoadCursor(0, win32con.IDC_ARROW) window_class.hbrBackground = win32con.COLOR_WINDOW window_class.lpfnWndProc = message_map # could also specify a wndproc. classAtom = win32gui.RegisterClass(window_class) # Create the Window. style = win32con.WS_OVERLAPPED | win32con.WS_SYSMENU self.hwnd = win32gui.CreateWindow(classAtom, self.window_class_name, style, 0, 0, win32con.CW_USEDEFAULT, win32con.CW_USEDEFAULT, 0, 0, hinst, None) win32gui.UpdateWindow(self.hwnd) self.notify_id = None self.refresh_icon() win32gui.PumpMessages() def _add_ids_to_menu_options(self, menu_options): result = [] for menu_option in menu_options: option_text, option_icon, option_action = menu_option if callable(option_action) or option_action in self.SPECIAL_ACTIONS: self.menu_actions_by_id.add((self._next_action_id, option_action)) result.append(menu_option + (self._next_action_id,)) elif non_string_iterable(option_action): result.append((option_text, option_icon, self._add_ids_to_menu_options(option_action), self._next_action_id)) else: print 'Unknown item', option_text, option_icon, option_action self._next_action_id += 1 return result def refresh_icon(self): # Try and find a custom icon hinst = win32gui.GetModuleHandle(None) if os.path.isfile(self.icon): icon_flags = win32con.LR_LOADFROMFILE | win32con.LR_DEFAULTSIZE hicon = win32gui.LoadImage(hinst, self.icon, win32con.IMAGE_ICON, 0, 0, icon_flags) else: print "Can't find icon file - using default." hicon = win32gui.LoadIcon(0, win32con.IDI_APPLICATION) if self.notify_id: message = win32gui.NIM_MODIFY else: message = win32gui.NIM_ADD self.notify_id = (self.hwnd, 0, win32gui.NIF_ICON | win32gui.NIF_MESSAGE | win32gui.NIF_TIP, win32con.WM_USER + 20, hicon, self.hover_text) win32gui.Shell_NotifyIcon(message, self.notify_id) def restart(self, hwnd, msg, wparam, lparam): self.refresh_icon() def destroy(self, hwnd, msg, wparam, lparam): if self.on_quit: self.on_quit(self) nid = (self.hwnd, 0) win32gui.Shell_NotifyIcon(win32gui.NIM_DELETE, nid) win32gui.PostQuitMessage(0) # Terminate the app. def notify(self, hwnd, msg, wparam, lparam): if lparam == win32con.WM_LBUTTONDBLCLK: self.execute_menu_option(self.default_menu_index + self.FIRST_ID) elif lparam == win32con.WM_RBUTTONUP: self.show_menu() elif lparam == win32con.WM_LBUTTONUP: pass return True def show_menu(self): menu = win32gui.CreatePopupMenu() self.create_menu(menu, self.menu_options) # win32gui.SetMenuDefaultItem(menu, 1000, 0) pos = win32gui.GetCursorPos() # See http://msdn.microsoft.com/library/default.asp?url=/library/en-us/winui/menus_0hdi.asp win32gui.SetForegroundWindow(self.hwnd) win32gui.TrackPopupMenu(menu, win32con.TPM_LEFTALIGN, pos[0], pos[1], 0, self.hwnd, None) win32gui.PostMessage(self.hwnd, win32con.WM_NULL, 0, 0) def create_menu(self, menu, menu_options): for option_text, option_icon, option_action, option_id in menu_options[::-1]: if option_icon: option_icon = self.prep_menu_icon(option_icon) if option_id in self.menu_actions_by_id: item, extras = win32gui_struct.PackMENUITEMINFO(text=option_text, hbmpItem=option_icon, wID=option_id) win32gui.InsertMenuItem(menu, 0, 1, item) else: submenu = win32gui.CreatePopupMenu() self.create_menu(submenu, option_action) item, extras = win32gui_struct.PackMENUITEMINFO(text=option_text, hbmpItem=option_icon, hSubMenu=submenu) win32gui.InsertMenuItem(menu, 0, 1, item) def prep_menu_icon(self, icon): # First load the icon. ico_x = win32api.GetSystemMetrics(win32con.SM_CXSMICON) ico_y = win32api.GetSystemMetrics(win32con.SM_CYSMICON) hicon = win32gui.LoadImage(0, icon, win32con.IMAGE_ICON, ico_x, ico_y, win32con.LR_LOADFROMFILE) hdcBitmap = win32gui.CreateCompatibleDC(0) hdcScreen = win32gui.GetDC(0) hbm = win32gui.CreateCompatibleBitmap(hdcScreen, ico_x, ico_y) hbmOld = win32gui.SelectObject(hdcBitmap, hbm) # Fill the background. brush = win32gui.GetSysColorBrush(win32con.COLOR_MENU) win32gui.FillRect(hdcBitmap, (0, 0, 16, 16), brush) # unclear if brush needs to be feed. Best clue I can find is: # "GetSysColorBrush returns a cached brush instead of allocating a new # one." - implies no DeleteObject # draw the icon win32gui.DrawIconEx(hdcBitmap, 0, 0, hicon, ico_x, ico_y, 0, 0, win32con.DI_NORMAL) win32gui.SelectObject(hdcBitmap, hbmOld) win32gui.DeleteDC(hdcBitmap) return hbm def command(self, hwnd, msg, wparam, lparam): id = win32gui.LOWORD(wparam) self.execute_menu_option(id) def execute_menu_option(self, id): menu_action = self.menu_actions_by_id[id] if menu_action == self.QUIT: win32gui.DestroyWindow(self.hwnd) else: menu_action(self) def non_string_iterable(obj): try: iter(obj) except TypeError: return False else: return not isinstance(obj, basestring)
icOns= itertools.cycle(glob.glob('*.ico')) #icOns=(os.path.join(mainfile, "DEC.ico"),os.path.join(mainfile, "DEC2.ico")) hover_text = "com1 9600 n 8 1 \n load: "
def hello(sysTrayIcon): print "Hello World."
def simon(sysTrayIcon): print "Hello Simon."
def rehandle(sysTrayIcon): print "rehandling......" global file_tell file_tell = 0
def switch_icon(sysTrayIcon): sysTrayIcon.icon = icons.next() sysTrayIcon.refresh_icon()
def stop(sysTrayIcon): t.stop() menu_optiOns= (('打印状态', icons.next(), hello), ('停止处理', icons.next(), simon), ('切换图标', None, switch_icon), ('重新处理今日数据', icons.next(), rehandle), ('其他设置', icons.next(), (('设置 1', icons.next(), simon), (hover_text, icons.next(), switch_icon), )) )
def bye(sysTrayIcon): print '退出.已停止'
""" on_quit=bye default_menu_index=1
t=threading.Thread(target=SysTrayIcon,args=(icons.next(), hover_text, menu_options,on_quit, default_menu_index))
#将线程设置为守护线程 t.setDaemon(True) #线程准备就绪,随时等候 cpu 调度 t.start()
#mutex = threading.Lock() t=threading.Thread(target=runReadFile,args=(1,)) #将线程设置为守护线程 t.setDaemon(True) #线程准备就绪,随时等候 cpu 调度 t.start() """
print "读取配置文件完成,测试数据库连接" sql = """select getdate(), '%s' as txt""" text='teststreeerrrooo' teststr=teststrRead(text) print '执行函数获得 teststr 为:',teststr
SysTrayIcon(icons.next(), hover_text, menu_options, on_quit=bye, default_menu_index=1)
""" while 1==1: strqq='' strqq = input("Enter your input: ") print "Received inpu is : ", strqq """
dec.ini 文件内容为
[DATA] sqlserver = '127.0.0.1' user = 'test' password = 'test' database = 'test' g_cOnn= None
import pymssql import ConfigParser cf=ConfigParser.ConfigParser() cf.read("conf.ini") DATABASE=cf.get("app_info","DATABASE") USER=cf.get("app_info","USER") PASSWORD=cf.get("app_info","PASSWORD") HOST=cf.get("app_info","HOST") PORT=cf.get("app_info","PORT") def mssql(sql): try: #cOnn=pymssql.connect(server="127.0.0.1", port="1433", user="test", password="test", database="master",charset="UTF-8") cOnn=pymssql.connect(host=HOST,user=USER,passwd=PASSWORD,db=DATABASE,port=PORT) cur = conn.cursor() cur.execute(sql) rows = cur.fetchall() conn.commit() cur.close() conn.close() return rows except pymssql.Error,e: print "Mysql Error %d: %s" % (e.args[0], e.args[1]) def operation(): select = mssql('select getdate(), \'kkkk\' as txt') return select #我返回这个是为了下面发送邮件用的,顺便增加个发送邮件的功能 dddd=operation() print dddd 1 qile1 OP cfing.ini 文件内容 [app_info] DATABASE=test USER=test PASSWORD=test HOST=127.0.0.1 PORT=1433 [mail] host=smtp.163.com [email protected] password=654321 [email protected];[email protected] |
2 Magician 2016-10-25 21:25:42 +08:00 via iPhone stackoverflow |
3 wellsc 2016-10-25 21:42:24 +08:00 莫名喜感 |
4 qile1 OP 第一次发代码,发完下班断网断电,回来就没法编辑了,下面补了一个简化的代码,提示如下内容 File "pymssql.pyx", line 505, in pymssql.connect (pymssql.c:7589) def connect(server='.', user='', password='', database='', timeout=0, TypeError: connect() got an unexpected keyword argument 'passwd |
5 orange88 2016-10-25 22:15:00 +08:00 via Android passwd<>password ? |
7 qile1 OP stackoverflow 上面查了下,有这个例子,我把 password 改成 passwd 也报错! 把链接字符串拼接成一个字符串传入也不对 print 'host=',SQLSERVER,"user=",USER,"password=",PASSWORD,"database=",DATABASE g_COnn= pymssql.connect(host=SQLSERVER,user=USER,password=PASSWORD,database=DATABASE) 输出正常值,在初始化连接的时候报错 @staticmethod def connect(): servers = ["server1", "server2", "server3"] cOnn= None for server in servers: try: cOnn= pymssql.connect(server, settings.MSSQL_USERNAME, settings.MSSQL_PASSWORD, settings.MSSQL_DB_NAME, charset="ISO-8859-1") break except: logger.info("Failed to connect to MSSQL Server: " + server) if conn: return conn else: logger.info("Failed to connect to ALL MSSQL servers") return conn 结果多次测试已经算是解决了吧 配置文件读取后显式的调用下可以使用了 cf=ConfigParser.ConfigParser() cf.read("conf.ini") DATABASE=cf.get("app_info","DATABASE") USER=cf.get("app_info","USER") PASSWORD=cf.get("app_info","PASSWORD") HOST=cf.get("app_info","HOST") PORT=cf.get("app_info","PORT") #HOST = '127.0.0.1' USER = 'test' PASSWORD = 'test' #DATABASE = 'test' PORT='1433' HOST1 = '127.0.0.1' USER1 = 'test' PASSWORD1 = 'test' #DATABASE1 = 'test' PORT1=PORT HOST1 = HOST USER1 = USER PASSWORD1 =PASSWORD DATABASE1 = DATABASE PORT1=PORT cOnn=pymssql.connect(host=HOST1,user=USER1,password=PASSWORD1,database=DATABASE1,port=PORT1) |