【问题标题】:'module' object has no attribute 'OrderedDict' error in pymongo'module' 对象在 pymongo 中没有属性 'OrderedDict' 错误
【发布时间】:2012-11-15 05:07:02
【问题描述】:

我对 pymongo 很陌生。在下面的代码中,

db = MySQLdb.connect(DB_HOST,DB_USR,DB_PWD,DB_NAME)
cursor = db.cursor()
query = "SELECT * FROM %s WHERE userid = \"%s\"" % (table, userID) 
cursor.execute(query)
colNames = [i[0] for i in cursor.description]
rows = cursor.fetchall()
objects_list = []
# The below logic makes JSON objet based on fetch MySQL rows.
for row in rows:
    d = collections.OrderedDict()
    index = 0
    for col in colNames:
        d[col] = row[index]
        index = index + 1
    objects_list.append(d)
return objects_list

我收到了错误,

trngl_advertise_perfm
trngl_advertise_activity
trngl_user_fblike
Traceback (most recent call last):
File "IngestDataToMongo.py", line 83, in <module>
userData = getData(user[0], TABLES[i]) # Get data of each user.
File "IngestDataToMongo.py", line 51, in getData
d = collections.OrderedDict()
AttributeError: 'module' object has no attribute 'OrderedDict'

请告诉我,如何消除错误。

【问题讨论】:

  • @InbarRose 我无法更改我的 python 版本,因为代码在服务器上运行的脚本中。那么是否有任何选项,例如导入文件或其他我可以使用而不是 OrderedDict 的东西。

标签: python mongodb collections runtime-error pymongo


【解决方案1】:

您使用的是 Python 2.6 或更早版本。 OrderedDict 直到 2.7 版才添加到 Python 中。

来自documentation

2.7 版中的新功能。

您可以改用this backport(也可从PyPI 获得),它适用于python 2.4 及更高版本,或者安装python 2.7 并使用该版本运行您的脚本。

【讨论】:

  • PyPI 上还有一个ordereddict 包,可能包含相同的代码。
  • @MarkusUnterwaditzer:确实,它从 PyPI 页面链接到配方。谢谢,更新了答案。
  • @MartijnPieters 现在,问题是我无法安装 python2.7,因为我在无法更改内容的服务器上使用 putty 运行脚本。那么是否有任何文件或代码可以导入以使其正常工作,或者在较旧的 python 版本中是否有任何 OrderdDict 选项?
  • @WhyandHow:是的,将后端作为模块安装在服务器上。脚本旁边的ordereddict.py 模块就足够了。然后,您可以使用 from ordereddict import OrderedDict 代替 from collections import OrderedDict
  • @WhyandHow:将整个 OrderedDict 定义复制到您的脚本中,删除 from .. import OrderedDict 行。
猜你喜欢
  • 2020-03-26
  • 1970-01-01
  • 1970-01-01
  • 2014-04-03
  • 2016-07-22
  • 2018-06-14
  • 2020-08-23
  • 2023-02-21
  • 2017-12-02
相关资源
最近更新 更多