【问题标题】:How to check whether query have inserted data or not in Python如何在 Python 中检查查询是否已插入数据
【发布时间】:2013-02-07 10:43:38
【问题描述】:

我正在使用原始 sql 查询将数据插入数据库。插入工作正常,现在我想对此插入查询执行一些检查,例如查询是否插入了数据 假设我有类似的插入查询

cursor.execute("some insert query" )

现在我想知道cursor.execute 是否已插入该行,然后显示一些文本,例如 success,如果它因某些 原因 未能插入,则显示文本像 error 并且如果该行已经插入然后显示,row already exists

但我不知道如何对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"]])

当我在 forloop 外部执行 cursor1.execute 时,它会插入最后一个条目,但如果我在 forloop 内部执行它,则会出错并且不会插入任何内容

【问题讨论】:

  • 也许这个 SO 问题会对您有所帮助:stackoverflow.com/questions/9014233/…
  • 我建议你学习如何正确地做到这一点;如果您使用的是 Django,那么您不应该使用原始 SQL。 Django 有一个不错的“模型”层,您应该使用它。请参阅 Django 网站上的文档。
  • 我建议也不要使用原始 SQL,Django 的 ORM 非常适合您尝试做的事情。但只是出于好奇:在 for 循环中插入时会出现什么错误?此外,我在您的代码中没有看到对 transaction.commit_unless_managed 的任何调用。使用它可能会有所帮助。
  • 感谢您的帮助,谢谢

标签: python django


【解决方案1】:

假设您使用的是 Django(您在问题中没有具体说明它,但您使用的是 django 标签),您需要在使用 @ 发出插入查询后执行 transaction.commit_unless_managed() (from django.db import transaction) 987654323@.

您可以在调用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'

【讨论】:

    猜你喜欢
    • 2020-01-21
    • 2012-09-02
    • 1970-01-01
    • 2011-07-14
    • 2019-07-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多