如何在Python中检查查询是否已插入数据

1 投票
1 回答
2059 浏览
提问于 2025-04-17 15:05

我正在使用原始的SQL查询来往数据库中插入数据。插入操作现在是正常的,但我想在这个插入查询上进行一些检查,比如说,想知道这条查询是否真的插入了数据。

cursor.execute("some insert query" )

我想知道当我执行 cursor.execute 时,是否成功插入了这一行数据。如果成功了,就给我显示一些文字,比如成功;如果因为某种原因插入失败了,就显示错误;如果这一行数据已经存在了,就显示行已存在

但是我不知道如何在 cursor.execute 上进行这些检查。

编辑

for i in range(numrows):
                row = cursor.fetchone()
                if row[6]==1:
                        arr["user_id"]=row[0]
                        arr["email"]=row[1]
                        arr["style_quiz_score"]=row[2]
                        arr["style_quiz_answer"]=row[3]
                        arr["date_joined"]=row[4]
                        arr["is_active"]=row[5]
                        arr['firstname'] = row[7]

                        arr["username"]=re.sub(r'[^a-zA-Z0-9]', '_', arr["email"])
                elif row[6]==2:
                        arr['lastname'] = row[7]
        cursor1.execute("insert into auth_user(id,username,first_name,last_name,email,password,is_staff,is_active,is_superuser,date_joined,last_login)  values(%s,%s,%s,%s,%s,'NULL',0,%s,0,%s,0)",[arr["user_id"],arr["username"],arr['firstname'],arr['lastname'],arr["email"],arr["is_active"],arr["date_joined"]])

当我在循环外执行 cursor1.execute 时,它只插入最后一条记录,但如果我在循环内执行,就会报错,什么也插不进去。

1 个回答

2

假设你在使用Django(虽然你在问题中没有具体说明,但你用了django标签),在用cursor.execute执行插入查询后,你需要调用transaction.commit_unless_managed()(记得先引入from django.db import transaction)。

你可以在调用commit_unless_managed时检查是否有异常,这样就能知道插入操作是否成功:

from django.db import connection, transaction, DatabaseError, IntegrityError

cursor = connection.cursor()
cursor.execute("some insert query" )

try:
    transaction.commit_unless_managed()
except DatabaseError, IntegrityError:
    print 'error'
else:
    print 'success'

撰写回答