我的 Django 应用程序中有一个 Celery 任务调用的函数,它处理 CSV 文件中的每一行,并尝试使用模型将每一行的信息插入 PostgreSQL 数据库,如下所示:
reader = csv.DictReader(csvfile, dialect=csv.get_dialect('excel'))
for row_number, row in enumerate(reader):
try:
...
customer, created = Customer.objects.get_or_create(
first_name = row['First Name'],
last_name = row['Last Name'],
email = row['Email'],
account_owner = account_owner
)
...
except Exception, e:
message = "%s: %s\n" % (type(e).__name__, e)
sys.stderr.write("%s\n" % message)
Customer.objects.get_or_create
在循环的第一次迭代中出现
以下错误:DatabaseError: no such savepoint
然后我会得到DatabaseError: current transaction is aborted, commands ignored until end of transaction block
之后的每次迭代。
我已经成功地将一条记录插入(使用 SQL 手动)到该表中,该记录与脚本将提供的信息相同。我也尝试过使用保存点,但没有运气:
sid = transaction.savepoint()
customer, created = Customer.objects.get_or_create(
first_name = row['First Name'],
last_name = row['Last Name'],
email = row['Email'],
account_owner = account_owner
)
transaction.savepoint_commit(sid)
这发生在我的开发机器上,它从 Homebrew 安装了 PostgreSQL 9.1。显然,主要目标是解决这个问题,但任何有助于调试 Celery 任务或定位我的 Postgres 日志文件的指针也会有所帮助。