Je suis en train d'écrire un script d'encapsulage en vrac à l'aide de ORM + custom raw SQL de Django. Le code a le schéma suivant:Django: commit mixte et raw db commits - TransactionManagementError
import sys, os
from django.core.management import setup_environ
from my_project import settings
from my_project.my_app.models import Model1, Model2
setup_environ(settings)
from django.db import transaction
from django.db import connection
@transaction.commit_manually
def process_file(relevant_file):
data_file = open(relevant_file,'r')
cursor = connection.cursor()
while 1:
line = data_file.readline()
if line == '':
break
if not(input_row_i%1000):
transaction.commit()
if ([some rare condition]):
model_1 = Model1([Some assignments based on line])
model_1.save()
values = [Some values based on line]
cursor.execute("INSERT INTO `table_1` ('field_1', 'field_2', 'field_3') VALUES (%i, %f, %s)", values)
data_file.close()
transaction.commit()
Je continue à obtenir l'erreur suivante:
django.db.transaction.TransactionManagementError: Transaction managed block ended with pending COMMIT/ROLLBACK
Comment puis-je résoudre ce problème?
Etes-vous sûr de ne pas avoir manqué d'inclure une condition dans l'exemple de code, ce qui entraînerait l'exécution de la dernière validation()? – knutin
oui, j'en suis sûr :) – Jonathan