浏览 5088 次
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2009-06-14
最后修改:2010-11-10
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() 这样用了一段时间,突然,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(self.host,self.user,self.password,self.database) 202 else: 203 self._connect(self.host,self.user,self.password,self.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) 经过以上2步修改即可,(比较山寨哈) 使用例子 import adodb conn = adodb.NewADOConnection('mysql') conn.Connect('10.10.10.1', 'user', 'password', 'mydb',3307) 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2009-06-15
对技术不懂,只能坐沙发了
|
|
返回顶楼 | |
发表时间:2009-07-07
在主机名那里加端口号不行吗?例如“localhost:3307”
|
|
返回顶楼 | |
发表时间:2009-07-08
haijd 写道 在主机名那里加端口号不行吗?例如“localhost:3307”
你说的这个方法,我还没有试过,应该是不行的吧, |
|
返回顶楼 | |
发表时间:2009-07-08
最后修改:2009-07-08
一般用的都是adodbapi吧,不是你说的这个adodb(我也是第一次看到这个) .
adodbapi 使用的是oledb,sql server是 data source=ip,port, mysql安装odbc或是oledb 驱动后,在连接字符串中加入port=xxx即可 |
|
返回顶楼 | |
发表时间:2009-07-08
jjx 写道 一般用的都是adodbapi吧,不是你说的这个adodb(我也是第一次看到这个) .
adodbapi 使用的是oledb,sql server是 data source=ip,port, mysql安装odbc或是oledb 驱动后,在连接字符串中加入port=xxx即可 不好意思,我使用的是mysql数据库 这个帖子讨论的是 http://phplens.com/lens/adodb/adodb-py-docs.htm 这个模块, 其他的一些数据库连接模块可能会支持标准之外的端口,但是 python 的 adodb 的确不支持连接除标准端口之外的端口 其他的数据库连接模块,我也会去试着用的, 还有一个模块比较好的,在python中 http://www.webwareforpython.org/DBUtils 打算以后的数据库连接模块,采用这个模块了,大家可以一起讨论下这个 支持连接池的 |
|
返回顶楼 | |
发表时间:2009-07-09
在python中,一般adodb 都是指adodbapi,而不是你说的那个adodb了,你的说法有误了,当然,你这样说也没什么问题
如果用要抽象一点的,我觉的除了sqlalchemy的python expression,没有什么其它可推荐的了 |
|
返回顶楼 | |