在python中操作Mysql数据库一般是使用MySQLdb或adodb,但是MySQLdb使用起来有点麻烦,所以平时我都是用adodb来操作mysql数据库。

adodb 有个非常不爽的地方就是无法连接非标准端口(3306)的mysql数据库,这种情况下只能使用MySQLdb了。某台服务器上因为软件兼容问题,同时使用着mysql4.1 和 mysql 5.0 两个数据库软件,mysql 4.1端口是3336。 今天写个程序需要连接这个3336的mysql数据库,本来想凑合着用MySQLdb的,只是觉得非常不爽。adodb也是调用MySQLdb的,为什么不支持非标准端口呢?于是,俺花时间hack一把adodb。

adodb是 Debian Etch 自带的,我想其他版本也是差不多,有同样需求的同学可以看看。

第一个修改的文件: /var/lib/python-support/python2.4/adodb/adodb.py

修改的是 class ADOConnection 中的 Connect函数:

下载: dbport.py
  1. def Connect(self,host=None,user=None,password=None,database=None,port=None):
  2.     self.database = database
  3.     self.host = host
  4.     self.user = user
  5.     self.password = password
  6.     if port == None :
  7.         self._connect(host,user,password,database)
  8.     else :
  9.         self.port = port
  10.         self._connect(host,user,password,database,port)
  11. return bool(self._conn)

在函数的参数增加了port=None,连接加入port参数的时候,传过去的_connect也加上port。

第二个修改的是 /var/lib/python-support/python2.4/adodb/adodb_mysql.py
修改 class adodb_mysql(adodb.ADOConnection) 的_connect函数如下:

  1. def _connect(self,host=None,user=None,password=None,database=None,port=3306):
  2.     self._conn = MySQLdb.connect(host, user, password, database,port)

现在,可以使用非标准端口的mysql了

  1. import adodb
  2. conn = adodb.NewADOConnection('mysql')
  3. conn.Connect('127.0.0.1', 'user', 'password', 'mydb',3336)