2017-10-05 10 views
0

私が持っている機能:おそらくなぜsqlalchemyはpostgresqlに挿入を行わないのですか?

def set_daily_amount_once(self): 
    query = Session().query(AccountBalance).order_by(AccountBalance.time_valued).all() 
    items = [item.__dict__ for item in query] 
    merchants = [d['merchant_account_id'] for d in items] 
    unique_merchants = [i for i in Counter(merchants)] 
    all_merchants_and_generated_dates = [] 
    all_statements = [] 
    all_daily_statement_for_database = [] 
    for i in unique_merchants: 
     merchant_and_generated_dates = {} 
     date_start = self.get_ab_trs(i,time.strftime("%Y-%m-%d"))[2] 
     date_end = time.strftime("%Y-%m-%d") 
     start = datetime.datetime.strptime(date_start, "%Y-%m-%d") 
     end = datetime.datetime.strptime(date_end, "%Y-%m-%d") 
     date_generated = [start + datetime.timedelta(days=x) for x in range(0, (end - start).days+1)] 
     date_generated = [i.strftime("%Y-%m-%d") for i in date_generated] 
     merchant_and_generated_dates[i]=date_generated 
     all_merchants_and_generated_dates.append(merchant_and_generated_dates) 
     for date in date_generated: 
      all_statements.append(self.get_ab_trs(i,date)[0]) 
     for statement in all_statements: 
      daily_statement=DailyAccountAmount(
       merchant_account_id=statement['merchant_account_id'], 
       date=statement['date'], 
       balance_opened=statement['balance_opened'], 
       balance_closed=statement['balance_closed'], 
       debit_amount=statement['debit_amount'], 
       credit_amount=statement['credit_amount'], 
       total_amount=statement['total_amount'], 
       currency=statement['currency'] 
      ) 
      all_daily_statement_for_database.append(daily_statement) 
    try: 
     Session().add_all(all_daily_statement_for_database) 
     Session().commit() 
     print('Must work!') 
    except Exception as huston_we_have_problems: 
     print(huston_we_have_problems) 

    return all_statements 

は、すべてのSELECTクエリが生成されますが、ログに私はすべてのINSERTクエリが表示されません。 例外はありません。すべてのコードはtryにありますが、DBには何も追加されていません。 問題は何か、解決方法は?

+0

'add_all()'を呼び出す前に、 'all_daily_statement_for_database'の値を印刷/ロギングしようとしましたか?おそらくそれは空のリストですか? – mhawke

+0

@mhawkeいいえ、それは空リストではなく、私はそれを印刷し、値を含んでいます。クラスの新しいオブジェクトには必要な値が含まれています。 'for'でレコードを追加しようとしましたが、それはうまくいきません。 – Klimenkomud

+1

あなたはおそらく(あなたは 'Session'の定義を提供していませんでした)2つの異なるセッションを作成します。インスタンスは、最初のコミットに追加されます。 'session = Session()'を試して、そこから作業してください。 –

答えて

1

あなたはあなたのセッションへの参照を保持しておらず、結果として、それが破棄されている:

Session().add_all(all_daily_statement_for_database) 
Session().commit() 

Sessionではなく、同じものの二つの別々のインスタンス上で動作し、したがって、コミット実行することは効果的ではありません。

session = Session() 
session.add_all(all_daily_statement_for_database) 
session.commit() 
+0

ありがとうございます!できます :) – Klimenkomud

関連する問題