2017-10-05 6 views
0

Je fonction:Pourquoi sqlalchemy ne fait pas d'insertions dans 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 

Probablement, toutes les requêtes SELECT sont produites, mais dans les journaux, je ne vois pas de INSERT requêtes. Je n'ai aucune exception, tout le code try - travail, mais rien ajouté à DB. Quel peut être le problème et comment le résoudre?

+0

Avez-vous l'impression/journalisation essayé la valeur de 'all_daily_statement_for_database' avant d'appeler' add_all() '? Peut-être que c'est une liste vide? – mhawke

+0

@mhawke Non, ce n'est pas une liste vide, je l'imprime et contient des valeurs, et le nouvel objet de ma classe contient les valeurs nécessaires. J'essaie d'ajouter des enregistrements dans 'for', mais cela ne fonctionne pas aussi. – Klimenkomud

+1

Vous (probablement, vous n'avez pas fourni la définition de 'Session') créez 2 sessions différentes. Les instances sont ajoutées au premier, le deuxième commits. Essayez 'session = Session()' et travaillez à partir de là. –

Répondre

1

Vous n'êtes pas tenue une référence à votre session et en conséquence il est mis au rebut:

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

fonctionne sur deux instances distinctes de Session, pas la même, d'où le Commit est pas efficace. Essayez ceci:

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

Merci beaucoup! Ça marche :) – Klimenkomud