【问题标题】:Python / Pymongo variable for collection name in db insert commanddb insert 命令中集合名称的 Python / Pymongo 变量
【发布时间】:2012-04-03 15:10:20
【问题描述】:

我有一小段代码,它基本上接受一个列表并运行一个循环,针对列表中的每个项目运行针对 twitter 的搜索查询。我希望列表中的每个项目都是一个集合名称,但由于某种原因,我无法弄清楚如何使 db<collection_name_variable>.insert(post)> 真正起作用:

我收到一个错误:

TypeError: +: 'Database' 和 'str' 的操作数类型不受支持

我知道这可能是非常基础的,但我只是在学习。

from twython import Twython
from pymongo import *

conn = Connection('localhost')
db = conn.nosqltweets
twitter = Twython()

types = ['mongodb', 'cassandra', 'couchdb']

for nosql in types:
    search_results = twitter.searchTwitter(q=nosql, rpp="100")
    for tweet in search_results["results"]:
        from_user = tweet['from_user'].encode('utf-8')
        text = tweet['text']
        created_at = tweet['created_at']
        id_str = tweet['id_str']
        post = { 'id_str': id_str, 'from_user': from_user, 'created_at': created_at }
        insert = db + nosql + ".insert(post)"
        insert

【问题讨论】:

  • 您正在尝试使用“+”运算符添加/连接类型为“Database”(db)和“String”(nosql)的对象。
  • Fenikso 是的,实际上令人惊讶的是,我确实理解了这个问题,只是不明白如何解决它。感谢您的评论!
  • @Ajj 您可以使用反引号 (`) 转义内联代码,无需对其进行调整。

标签: python mongodb pymongo


【解决方案1】:

替换:

insert = db + nosql + ".insert(post)"
insert

与:

db[nosql].insert(post)

【讨论】:

  • 对不起 diliop 没用,我会回答我自己的问题,但它不会让我这样做是我所做的:我使用 getattr(db, nosql) collection = getattr(db, nosql) collection.insert(post)
  • 除非上面的代码中缺少某些内容,否则应该可以。 db 的类型为<class 'pymongo.database.Database'>,您可以同时使用点表示法,即db.couchdbdict 成员访问即db['couchdb'],以获取<class 'pymongo.collection.Collection'> 的实例,您可以在该实例上调用insert()
  • diliop 你是对的,显然我没有尝试你正确发布的内容,因为我今晚又试了一次,它成功了!谢谢!!
  • 知道了,对不起,我是这个网站的新手!
猜你喜欢
  • 2018-08-01
  • 2022-08-23
  • 1970-01-01
  • 2018-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-06
相关资源
最近更新 更多