原文链接: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发现,还是比较强大的,(简单,直观)
- 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()
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
- 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)
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
如果你是使用其他数据库,类同,修改之
- 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)
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步修改即可,(比较山寨哈)
使用例子
- import adodb
- conn = adodb.NewADOConnection('mysql')
- conn.Connect('10.10.10.1', 'user', 'password', 'mydb',3307)