问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

python 怎么连接db2数据库

发布网友 发布时间:2022-04-30 19:20

我来回答

2个回答

懂视网 时间:2022-04-30 23:41

#!/usr/local/bin/python 2 # -*- coding: utf-8 -*- 3 4 import threading,ibm_db,time,Queue 5 6 class db2pool(object): 7 def __init__(self,host,port,user,password,db,conn_num): 8 self.host=host 9 self.port=port 10 self.user=user 11 self.password=password 12 self.db=db 13 self.conn_num=conn_num 14 15 self.conn_queue=Queue.Queue(0) 16 17 for i in range (0,self.conn_num): 18 try: 19 conn=(ibm_db.connect("DATABASE="+self.db+";HOSTNAME="+self.host+";PORT="+self.port+";PROTOCOL=TCPIP;UID="+self.user+";PWD="+self.password+";", "", "")) 20 self.conn_queue.put(conn) 21 except Exception as e: 22 print e 23 24 def getconnect(self): 25 26 for i in range (0,5): 27 28 if self.conn_queue.qsize()>0: 29 conn=self.conn_queue.get() 30 31 try: 32 stmt=ibm_db.prepare(conn,"select 1 from sysibm.sysdummy1") 33 ibm_db.execute(stmt) 34 return conn 35 except Exception as e: 36 print e 37 try: 38 conn=(ibm_db.connect("DATABASE="+self.db+";HOSTNAME="+self.host+";PORT="+self.port+";PROTOCOL=TCPIP;UID="+self.user+";PWD="+self.password+";", "", "")) 39 self.conn_queue.put(conn) 40 except Exception as e: 41 print e 42 43 time.sleep(0.5) 44 45 self.logger.echo("warning","get connection error") 46 47 def getclose(self,conn): 48 self.conn_queue.put(conn) 49 50 #example 51 def work(pool,i): 52 # while True: 53 conn=pool.getconnect() 54 if conn: 55 try: 56 pass 57 stmt=ibm_db.prepare(conn,"select "+str(i)+" from sysibm.sysdummy1") 58 ibm_db.execute(stmt) 59 result=ibm_db.fetch_both(stmt) 60 while (result): 61 print " result[0]="+str(result[0])+"++++"+str(conn) 62 result=ibm_db.fetch_both(stmt) 63 except Exception as e: 64 print e 65 finally: 66 pass 67 pool.getclose(conn) 68 time.sleep(5) 69 70 if __name__=="__main__": 71 pool=db2pool("172.16.2.9","60000","db2inst1","db2inst1","secs",5) 72 for i in range (0,50): 73 t=threading.Thread(target=work,args=(pool,i,)) 74 t.start()

 

因为我自己对python也不熟,这里有个地方我采用了妥协的办法:
我是在调用连接的时候去检查连接是否还存活着,而一般的情况下都是用一个后台的线程每隔一段时间去检查线程的。

我也尝试着这样去做了,但发现一个问题:获取连接队列conn=self.conn_queue.get()这一过程对各方都是平等的,谁抢到就是谁的。如果要做个检查连接的方法,则我希望它获得队列的优先级要高与正常调用的的方法,这样就不会出现连接队列一直被正常调用的方法霸占着,而检查连接的方法却因为抢不到连接而不工作。看来这部分要在实现了可控优先级的队列后才能实现了。

用python自定义实现db2的连接池

标签:

热心网友 时间:2022-04-30 20:49

使用模块pydb2即可
import DB2
conn = DB2.connect(dsn='sample', uid='db2inst1', pwd='secret')
无异常表示成功连接上DB2
之后访问数据库只要遵循python DBI2.0的规范就可以拉!
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
创新5.10060声卡怎么关闭,为什么音质变得很差?我用的是KX 我已经装了声卡,和Kx管理器。可声音听见还是那么幼稚。怎么把声音调的... ...装不上KX3550,声卡是 创新5.1的 装完KX3550重启以后,提示 初始化... 我买了一个创新5.1 0060声卡,玩龙之谷游戏就声音不完全,只有背景音乐... 声卡5.10060KX驱动3550调试怎么弄 win11玩csgo游戏一直闪退什么原因 win11玩csgo游戏一直闪退的解决... 习惯养成心得体会 饥荒ios高脚鸟蛋怎么孵化高脚鸟怎么养 故事的力量可以从什么角度来分析? 地震前为什么要出现地震云 全民k歌直播的花都去哪了? 全民K歌怎么获得鲜花 全民K歌获得鲜花的方法 谁能告诉我,全民k歌怎么刷鲜花的啊! 全民k歌,登录,怎么领不到鲜花 全民K歌怎么查看自己送给别人的花 怎么在全民K歌里面查看自己一共的鲜花数 有没有谁知道哪里卖自媒体运营账号的么? 全民k歌别人送给我的鲜花那里去了 全民k歌怎么获得鲜花? 全民k歌里面粉丝送的花在哪里看 全民k歌直播的花上哪去了 全民k歌别人送的鲜花可以查看吗,如果可以,在哪里查看 全民K歌里面的鲜花怎样才能买到? 自媒体账号交易平台哪个好? 功率5w,一小时耗多少电? 一度电1.5元 75W功率一小时多少钱? 美的中央空调一台75w工作一小时需要多少度电 75w的小电机不停运转一天耗电量是多少 220v75w一小时能耗多少电? 宽95高60是多少寸电视? 饼折的做法,饼折怎么做好吃,饼折的家常做法 大白菜软腐病用什么药效果好呢,氯溴异氰尿酸和辛菌胺哪种更有效果 请问专家花菜有侧枝需要掰掉吗? 白菜烂根用什么药?? 请问老师,苹果树粗皮病刮后,能用氯溴异氰尿酸吗,涂抹用多少倍,对了刚打完清园药用的石硫合剂,能否用 各位老师好,请问治疗桃树流胶病用氯溴异氰尿酸好吗谢谢。 老师早上好,柚子这样是铁现象吗?还是细菌性病害? 饺子馅放在冷冻柜好还是保鲜柜好? 世佳伊宝可治细菌病害吗? 全民湿身泡泡派对都是怎么玩的,好玩吗? 老师大白菜叶上黑点是啥病?怎样预防?谢谢! 他们说攀枝花领地·阳光花城四月底有个泳池泡泡派对,是真的嘛? 老师,辛菌胺醋酸盐能防柑橘溃疡病吗? 辛菌胺醋酸盐可以用来朝天椒灌根吗 香酥板栗饼的做法视频 辛菌胺醋酸盐主治什么 氯溴异氰尿酸和二氯异氰尿酸钠的区别是什么?哪个好些? 泡泡卡丁车海滩派对怎么领奖? 氯溴异氰尿酸能不能和尿素混用? 菌毒清和辛菌胺醋酸盐一样吗?