postgresql psycopg2.errors.InFailedSqlTransaction:当前事务被中止,命令被忽略,直到事务块结束,不知道如何修复它

f0brbegy  于 2023-02-12  发布在  PostgreSQL
关注(0)|答案(1)|浏览(748)

我尝试使用psycopg2将数据插入到我的数据库中,然后我得到了这个奇怪的错误。我尝试了一些方法,但是没有任何效果。这是我的代码:

def insert_transaction():
global username
now = datetime.now()
date_checkout = datetime.today().strftime('%d-%m-%Y')
time_checkout = now.strftime("%H:%M:%S")

username = "Peter1"

connection_string = "host='localhost' dbname='Los Pollos Hermanos' user='postgres' password='******'"
conn = psycopg2.connect(connection_string)
cursor = conn.cursor()
try:
    query_check_1 = """(SELECT employeeid FROM employee WHERE username = %s);"""
    cursor.execute(query_check_1, (username,))
    employeeid = cursor.fetchone()[0]
    conn.commit()
except:
    print("Employee error")

try:
    query_check_2 = """SELECT MAX(transactionnumber) FROM Transaction"""
    cursor.execute(query_check_2)
    transactionnumber = cursor.fetchone()[0] + 1
    conn.commit()
except:
    transactionnumber = 1

""""---------INSERT INTO TRANSACTION------------"""

query_insert_transaction = """INSERT INTO transactie (transactionnumber, date, time, employeeemployeeid)
                    VALUES (%s, %s, %s, %s);"""
data = (transactionnumber, date_checkout, time_checkout, employeeid)
cursor.execute(query_insert_transaction, data)
conn.commit()
conn.close()

这是错误:

", line 140, in insert_transaction
cursor.execute(query_insert_transaction, data) psycopg2.errors.InFailedSqlTransaction: current transaction is aborted, commands ignored until end of transaction block
tcomlyy6

tcomlyy61#

该错误消息表示前面的SQL语句之一导致了错误。如果在执行SQL语句时发生异常,则需要调用连接的回滚方法(conn.rollback())来重置事务的状态。否则PostgreSQL将不允许进一步执行语句。
理想情况下,您希望记录实际错误以供以后分析,因此代码的结构应该如下所示:

try:
    cursor.execute(sql, values)
    conn.commit()
except Exception as e:
    print(f'Error {e}')
    print('Anything else that you feel is useful')
    conn.rollback()

相关问题