2016-07-20 13 views
0

Ich habe einen Ordner mit über 200 000 JSON-Dateien. Jedes Json-Objekt ist ein Tweet (twitter). Ich erhalte eine Fehlermeldung, während Sie einen Tweet in die db SparSqlalchemy - Wie zu beheben '_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 

Ich bin auf dieser Strecke einen Fehler bekommen session.add(new_tweet)

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

ich einen try hinzugefügt zu debuggen zu können, aber ich habe keine Hinweis, wie Sie diesen Tweet in diese Datenbank einfügen. Dieses Problem tritt nach dem 153. tweet

complete gist - line 85

Antwort

1

create_new_user kehrt Query Objekt einfügen, wenn der Benutzer

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

existiert, aber Sie müssen User Objekt create_new_tweet passieren.

Sie können

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 
wie diese etwas tun