2017-12-03 10 views
-3

私は以下のコードのように多くのインスタンスを持っています。どのように抽象化して再利用可能にすることができますか?再利用可能なコードを作成するには?

#json_generator() is a function that yields paginated json 
#Foo and Bar are sqlalchemy models 

def fetch_foo_data(): 
    URL = BASE_URL + ','.join(Foo.__table__.columns.keys()) 
    return json_generator(URL) 

def fetch_bar_data(): 
    #Bar model has id as primary key that doesn't exist in the JSON data 
    #so I am excluding it 
    URL = BASE_URL + ','.join(Bar.__table__.columns.keys()[1:]) 
    return json_generator(URL) 

def bulk_load_foo_data(): 
    for json in fetch_foo_data(): 
     foos = map(lambda foo: Foo(**foo), json) 
     try: 
      session.bulk_save_objects(foos) 
      session.commit() 
     except Exception as e: 
      print e 
      session.rollback() 

def bulk_load_bar_data(): 
    for json in fetch_bar_data(): 
     bars = map(lambda bar: Bar(**bar), json) 
     try: 
      session.bulk_save_objects(bars) 
      session.commit() 
     except Exception as e: 
      print e 
      session.rollback() 

答えて

-1

関数にオブジェクトを渡します。第二の機能については

def fetch_object_data(obj, min=0, max=-1): 
    URL = BASE_URL + ','.join(obj.__table__.columns.keys()[min:max]) 
    return json_generator(URL) 

を:

def bulk_load_object_data(obj): 
    for json in fetch_foo_data(): 
     foos = map(lambda foo: obj(**foo), json) 
     try: 
      session.bulk_save_objects(foos) 
      session.commit() 
     except Exception as e: 
      print e 
      session.rollback() 

私はコードが実際にやって何かわからない...

+0

誰かが説明することができます私はなぜ彼がdownvoteでしたか?私は私の代理人を気にしないが、本当に私が間違っていたことを理解していない... ':( ' –

関連する問題