2012-04-02 39 views
4

我有这样一小段代码,基本上需要一个列表并运行一个循环,对列表中的每个项目运行针对twitter的搜索查询。我想在列表中每个项目是一个集合名称,但由于某种原因,我无法弄清楚如何使db<collection_name_variable>.insert(post)>实际工作:在db插入命令中收集名称的Python/Pymongo变量

我得到一个错误:

TypeError: unsupported operand type(s) for +: 'Database' and '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 
+1

您尝试添加类型 “数据库”(DB)和 “字符串” 使用“(NoSQL的)的/串连对象+ “运营商。 – Fenikso 2012-04-02 17:50:03

+0

Fenikso yep,实际上令人惊讶,因为它是我明白的问题,只是不明白如何解决它。感谢您的评论! – 2012-04-02 19:29:19

+0

@Ajj你可以通过使用反引号(')来避免内联代码的调整。 – 2012-04-03 07:10:51

回答

10

替换:

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

有:

db[nosql].insert(post) 
+0

对不起diliop,没有工作,我会回答我自己的问题,但它不会让我在这里是我所做的: 我用getattr(db,nosql) collection = getattr(db,nosql) collection.insert(post) – 2012-04-02 19:31:18

+3

除非上面的代码中缺少某些东西,否则这应该起作用。 db的类型为'',你可以同时使用点符号,即'db.couchdb'或'dict'成员访问,即'db ['couchdb']'来获得' '你可以调用'insert()'。 – diliop 2012-04-02 20:16:34

+0

diliop你是对的,显然我没有尝试你发布的内容是否正确,因为我今天晚上再次尝试了它,它工作正常!谢谢!! – 2012-04-03 01:26:35