2012-04-02 7 views
4

Ich habe dieses kleine Stück Code, der im Grunde genommen eine Liste und führt eine Schleife, Suchabfragen für jedes Element in der Liste ausgeführt wird. Ich möchte, dass jeder Eintrag in der Liste eine Sammlung Name sein, aber aus irgendeinem Grund kann ich nicht herausfinden, wie db<collection_name_variable>.insert(post)> zu machen, um tatsächlich funktionieren:Python/Pymongo Variable für Sammlungsname in db Einfügen Befehl

Ich erhalte eine Fehlermeldung:

TypeError: unsupported operand type(s) for +: 'Database' and 'str'

Ich weiß, das ist wahrscheinlich sehr einfach, aber ich lerne gerade.

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

Sie versuchen, hinzuzufügen/verketten Objekt vom Typ "Datenbank" (db) und "String" (nosql) mit „+ " Operator. – Fenikso

+0

Fenikso yep, eigentlich so überraschend, wie es ist, ich habe das Problem verstanden, habe einfach nicht verstanden, wie man es löst. Danke für den Kommentar! –

+0

@Ajj können Sie Inline-Code mit Backtick (') zu entkommen, keine Notwendigkeit, es zu zwicken. –

Antwort

10

ersetzen:

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

mit:

db[nosql].insert(post) 
+0

Leider diliop, die nicht funktioniert, würde ich meine eigene Frage beantworten, aber es wird mich nicht hier lassen, was ich getan habe: habe ich getattr (db, nosql) collection = getattr (db, nosql) collection.insert (post) –

+3

Wenn in Ihrem Code oben nichts fehlt, sollte dies funktionieren. db hat den Typ '' und Sie können sowohl Punktnotation verwenden, dh 'db.couchdb' oder' dict' Mitglied, das auf 'db ['couchdb']' zugreift, um eine Instanz von 'zu erhalten 'auf dem Sie' insert() 'aufrufen. – diliop

+0

diliop du hast recht, anscheinend habe ich nicht versucht was du richtig gepostet hast weil ich es heute Abend nochmal versucht habe und es hat geklappt! Vielen Dank!! –