Eclipse下Python的MySQLdb的安装以及相关问题

前提是要安装好Python以及eclipse和MySQL的相应版本。本文Python为2.7,MySQL为5.1Eclipse为3.6.2

下载完MySQLdb以后,直接安装即可。在eclipse中启用它的时候要注意遇到问题可参看如下:

文章来源http://www.chengxuyuans.com/Python/32723.html

 pydev是一个很好的开发工具,总有一个问题让我很头痛,使用第三方库的时候,总是会提示
Unresolved import,以 import MySQLdb为例,在python命令行输入:import MySQLdb 确认了安装成功后,使用pydev 还是会报Unresolved import。
就需要给PyDev添加支持:
打开:windows->Preferences->PyDev->Interpreter - Python
在Forced Builtins下面手工添加 MySQLdb 字段 强制编译。
Apply之后,可以看到 Libraries 下面添加了 MySQLdb的目录。如果没有,则手工在Libraries 下面添加MySQLdb的目录,再次强制编译即可。
  但在装wxPython2.9-win32-py27 时, import wx 使用了上述方法后仍报错,原因是在安装wx2.9时,目录为Python27\Lib\site-packages\*wxPython2.9-msi*\wx; 只要把wx越过他的上级目录,直接放在site-packages下就可以解决问题了。

 原来ubuntu 12.04 python-mysqldb只需要import MySQLdb就可以使用MySQLdb.cursors.DictCursor(字典游标)

不过最近不知道python的原因还是mysqldb的原因,应该是python-mysqldb版本问题吧,
Traceback (most recent call last):
  File "", line 22, in
AttributeError: 'module' object has no attribute 'cursors'
MySQLdb.cursors 分离出去了,需要单独import。

针对旧代码解决方案,
一、 行首 import MySQLdb.cursors.DictCursor
二、
1.  zhipeng@ubuntu:~$ python -c "import MySQLdb as mysqldb; print mysqldb.__file__"
/usr/lib/python2.7/dist-packages/MySQLdb/__init__.py
2. sudo su
3. echo "import cursors" >> /usr/lib/python2.7/dist-packages/MySQLdb/__init__.py
4. zhipeng@ubuntu:~$ python -c "import MySQLdb as mysqldb; print mysqldb.cursors"


DictCursor的这个功能是继承于CursorDictRowsMixIn,这个MixIn提供了3个额外的方法: fetchoneDict、fetchmanyDict、fetchallDict。
 
在默认情况下cursor方法返回的是BaseCursor类型对象,BaseCursor类型对象在执行查询后每条记录的结果以列表(list)表示。如果要返回字典(dict)表示的记录,就要设置cursorclass参数为MySQLdb.cursors.DictCursor类。
cur = conn.cursor(cursorclass=MySQLdb.cursors.DictCursor)
 
这个参数也可在调用connect方法建立连接时设置,如下:
>>> conn = MySQLdb.connect(host='192.168.1.103', port=3306, user='testacc', pass
wd='test1234', db='1dcq', cursorclass=MySQLdb.cursors.DictCursor)
>>>conn.close()
 
例子:
>>> import MySQLdb
>>> conn = MySQLdb.connect(host='192.168.1.103', port=3306, user='testacc', passwd='test1234', db='1dcq')
>>> cursor = conn.cursor()
>>> cursor.execute('SELECT * FROM pagesobject LIMIT 0, 1')
1L
 
>>> cursor.fetchone()
(1L, 0L, '???', 'true', None, 0)
>>> cursor.close()
 
对比实验如下:
>>> cursor = conn.cursor(MySQLdb.cursors.DictCursor)
>>> cursor.execute('SELECT * FROM pagesobject LIMIT 0, 1')
1L
>>> cursor.fetchone() # 等价fetchoneDict()
{'PageDesc': None, 'P_Id': 0L, 'isParent': 0, 'Html_open': 'true', 'PageName': '???', 'Id': 1L}
>>> cursor.close()
>>>conn.close()
 

猜你喜欢

转载自blog.csdn.net/nalnait/article/details/81351244