2012-04-02 8 views
4

私は基本的にリストを取り、リスト内の各項目について、さえずりに対して検索クエリを実行し、ループを実行するコードのこの小片を持っています。私は、リストの各項目は、コレクション名になりたいが、私はdb<collection_name_variable>.insert(post)>が実際に動作するようにする方法を見つけ出すことはできません何らかの理由:の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

あなたがタイプ "データベース"(デシベル)と "文字列"「使って(のNoSQL)の/ CONCATENATEオブジェクトを追加しようとしています+ "演算子。 – Fenikso

+0

フェニッソは、実際にはそれが私が問題を理解したように実際にそれが解決する方法を理解していないように驚くほどです。コメントありがとう! –

+0

@Ajjあなたはバックティック( ')を使ってインラインコードをエスケープすることができます。 –

答えて

10

置き換えます

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

で:

db[nosql].insert(post) 
+0

申し訳ありませんがdiliopは私がやったことです: 私は(デシベル、NoSQLの) コレクション= GETATTR(デシベル、NoSQLの)GETATTRを使用しました collection.insert(投稿) –

+3

上記のコードに何か不足がないかぎり、これはうまくいくはずです。 dbは ''型で、 'db ['couchdb']'にアクセスする 'db.couchdb'または' dict'メンバの両方のドット表記を使用して ' 'あなたが' insert() 'を呼び出します。 – diliop

+0

あなたは正しいです、明らかに、私はあなたが正しく投稿したものを試しませんでした。今晩もう一度試してみました。ありがとう!! –