`
crazier9527
  • 浏览: 995180 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

python adodb 支持mysql非标准端口

阅读更多

原文链接:h ttp://www.iteye.com/topic/408249

python对数据库的操作大多是基于

MySQLdb 模块

http://mysql-python.sourceforge.net/

但是,一般情况下大家都很少直接去调用 MySQLdb 去操作数据库

大多会借助

adodb

http://phplens.com/lens/adodb/adodb-py-docs.htm

小用了一下 adodb发现,还是比较强大的,(简单,直观)

Python代码 复制代码
  1. import adodb;   
  2. conn = adodb.NewADOConnection('mysql')   
  3. conn.Connect('server','user','pwd','db')   
  4. cursor = conn.Execute('select * from table')   
  5.   
  6. while not cursor.EOF:   
  7.     print cursor.fields   
  8.     cursor.MoveNext()   
  9.   
  10. cursor.Close()   
  11. conn.Close()   
import adodb;
conn = adodb.NewADOConnection('mysql')
conn.Connect('server','user','pwd','db')
cursor = conn.Execute('select * from table')

while not cursor.EOF:
	print cursor.fields
	cursor.MoveNext()

cursor.Close()
conn.Close() 



这样用了一段时间,突然,DBA那边说,数据库需要复用下,又安装了一个mysql,即是两个mysql在一台机器上并存,占用不同的端口
标准端口(3306)
另外一个端口(3307)

再修改程序的时候发现,adodb根本就没有修改port的选项,

为了,不改动太多的已有代码,

于是乎,see了see ,adodb的源码,

(既然 MySQLdb 支持非标准port, 而 adodb是封装了MySQLdb,那就有办法搞搞)

1. 第一步
adodb-220/adodb/adodb.py

Python代码 复制代码
  1. 194     def Connect(self,host=None,user=None,password=None,database=None):   
  2. 195         self.database = database   
  3. 196         self.host = host   
  4. 197         self.user = user   
  5. 198         self.password = password   
  6. 199         self._connect(host,user,password,database)   
  7. 200         return bool(self._conn)   
  8.   
  9. 增加对 port的支持(其实就是增加从 adodb这边把port参数传入到 MySQLdb 那边就可以了)   
  10. 修改如下   
  11.   
  12. 194     def Connect(self,host=None,user=None,password=None,port=None,database=None):   
  13. 195         self.database = database   
  14. 196         self.host = host   
  15. 197         self.user = user   
  16. 198         self.password = password   
  17. 199         self.port = port   
  18. 200         if self.port is None:   
  19. 201             self._connect(host,user,password,database)   
  20. 202         else:   
  21. 203             self._connect(host,user,password,database,self.port)   
  22. 200         return bool(self._conn)  
194     def Connect(self,host=None,user=None,password=None,database=None):
195         self.database = database
196         self.host = host
197         self.user = user
198         self.password = password
199         self._connect(host,user,password,database)
200         return bool(self._conn)

增加对 port的支持(其实就是增加从 adodb这边把port参数传入到 MySQLdb 那边就可以了)
修改如下

194     def Connect(self,host=None,user=None,password=None,port=None,database=None):
195         self.database = database
196         self.host = host
197         self.user = user
198         self.password = password
199         self.port = port
200         if self.port is None:
201             self._connect(host,user,password,database)
202         else:
203             self._connect(host,user,password,database,self.port)
200         return bool(self._conn)



2. 第二步, 因为我是使用mysql,所以,只是去改动了adodb_mysql.py
   如果你是使用其他数据库,类同,修改之

Python代码 复制代码
  1. 34     def _connect(self,host=None,user=None,password=None,database=None):   
  2. 35         self._conn = MySQLdb.connect(host, user, password, database)   
  3.   
  4. 修改如下   
  5.   
  6. 34     def _connect(self,host=None,user=None,password=None,database=None, port=None):   
  7. 35         self._conn = MySQLdb.connect(host, user, password, database, port)  
34     def _connect(self,host=None,user=None,password=None,database=None):
35         self._conn = MySQLdb.connect(host, user, password, database)

修改如下

34     def _connect(self,host=None,user=None,password=None,database=None, port=None):
35         self._conn = MySQLdb.connect(host, user, password, database, port)



经过以上2步修改即可,(比较山寨哈)

使用例子

Python代码 复制代码
  1. import adodb   
  2. conn = adodb.NewADOConnection('mysql')   
  3. conn.Connect('10.10.10.1''user''password''mydb',3307)  
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics