2016-07-20 19 views
0

私は200,000以上のjsonファイルを含むフォルダを持っています。各jsonオブジェクトはTweet(twitter)です。Sqlalchemy - '_sa_instance_state'の修正方法

#sqlalchemy_insert.py 
def create_new_tweet(data, new_user): 
    """ 
    insert new tweet into db 
    """ 
    #tweet 
    tweet_id = data.get('id') 
    language = data.get('lang', 'en') 
    tweet_text = data.get('text') 
    in_reply_to_user = data.get('in_reply_to_user_id') 
    coord = check_if_it_s_null(data.get('coordinates')) 
    geo_location = check_if_it_s_null(data.get('geo')) 
    created_at = parse(data.get('created_at')) 
    try: 
     new_tweet = Tweet(id=tweet_id, tweet=tweet_text, 
        lang=language,created_at=created_at, 
        geo=geo_location, coordinates=coord, 
        user=new_user) 
     session.add(new_tweet) 
    except: 
     import ipdb; ipdb.set_trace() 
    session.commit() 
    return new_tweet 

私はデバッグができるようにtryを追加session.add(new_tweet)

ipdb> session.add(new_tweet) 
*** AttributeError: 'Query' object has no attribute '_sa_instance_state' 

この行にエラーを取得していデシベルにつぶやきを節約しながら、私はエラーを取得していないが、私は何を持っていますこのdbにこのツイートを挿入する手掛かりこの問題は、ユーザーが

new_user = session.query(User).filter(User.id == user_id) # it's a query 

を存在しますが、あなたはcreate_new_tweetUserオブジェクトを渡す必要がある場合153thつぶやきに

complete gist - line 85

答えて

1

create_new_user戻りQueryオブジェクトを挿入した後に発生します。

あなたはこの

def create_new_user(data): 
    s_name = (data.get('user').get('screen_name')) 
    user_name = (data.get('user').get('name')) 
    user_id = (data.get('user').get('id')) 
    new_user = session.query(User).filter(User.id == user_id).first() # it's a User object 
    if new_user is None: 
     new_user = User(id=user_id, name=user_name, screen_name=s_name) 
     session.add(new_user) 
     session.commit() 
     #creating a profile 
     create_new_profile(data, new_user) 
    return new_user 
ような何かを行うことができます
関連する問題