原文链接: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代码
importadodb;
conn = adodb.NewADOConnection('mysql')
conn.Connect('server','user','pwd','db')
cursor = conn.Execute('select * from table')
whilenotcursor.EOF:
printcursor.fields
cursor.MoveNext()
cursor.Close()
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代码
194defConnect(self,host=None,user=None,password=None,database=None):
195self.database = database
196self.host = host
197self.user = user
198self.password = password
199self._connect(host,user,password,database)
200returnbool(self._conn)
增加对 port的支持(其实就是增加从 adodb这边把port参数传入到 MySQLdb 那边就可以了)
修改如下
194defConnect(self,host=None,user=None,password=None,port=None,database=None):
195self.database = database
196self.host = host
197self.user = user
198self.password = password
199self.port = port
200ifself.portisNone:
201self._connect(host,user,password,database)
202else:
203self._connect(host,user,password,database,self.port)
200returnbool(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代码
34def_connect(self,host=None,user=None,password=None,database=None):
35self._conn = MySQLdb.connect(host, user, password, database)
修改如下
34def_connect(self,host=None,user=None,password=None,database=None, port=None):
35self._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代码
importadodb
conn = adodb.NewADOConnection('mysql')
conn.Connect('10.10.10.1','user','password','mydb',3307)