获取具有Sqlite E的事件

2024-04-26 01:40:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我将Python2.7与Pyqt4.10和sqlite3一起使用

在我的数据库中,两个表之间有一个外键。我想在用户试图删除目标表中有与之关联的值的父键时,向用户引发一个GUI错误

守则:

    deleted1 = self.listWidget.currentItem().text()
    deleted = unicode(deleted1)
    quit_title1 = 'تأكيد'
    quit_title = quit_title1.decode('utf-8')
    quit_msg1 = ' هل انت متأكد من مسح الفئة '
    quit_msg = quit_msg1.decode('utf-8')
    result = QtGui.QMessageBox.critical(Dialog, quit_title, quit_msg, QtGui.QMessageBox.Yes | QtGui.QMessageBox.No, QtGui.QMessageBox.No)
    if result == QtGui.QMessageBox.Yes:
        conn = sqlite3.connect('storage/container.db')
        conn.row_factory = lambda c, row: row[0]
        c = conn.cursor()
        c.execute("PRAGMA foreign_keys = 1")
        c.execute("DELETE FROM categories WHERE category_name = (?)", (deleted, ))
        conn.commit()
        conn.close()

它返回错误:

Traceback (most recent call last):
  File "C:\python\townoftechwarehouse\edit_category.py", line 102, in deleteing
    c.execute("DELETE FROM categories WHERE category_name = (?)", (deleted, ))
sqlite3.IntegrityError: FOREIGN KEY constraint failed

这个错误不会终止程序,但它在UI中完全没有任何作用,我希望用户知道他能够删除它,因为数据库中有与它的连接


Tags: 用户数据库executetitle错误connsqlite3quit
1条回答
网友
1楼 · 发布于 2024-04-26 01:40:20

只需将其包装在try/except中并捕获sqlite3.IntegrityError。然后,如果出现错误,您几乎可以做任何事情

(由于您正在启动数据库并在这里执行所有操作,因此我建议将其重构为几个函数….)

但这里有一个例子,我跳过了GUI部分

deleted1 = self.listWidget.currentItem().text()
deleted = unicode(deleted1)
quit_title1 = 'تأكيد'
quit_title = quit_title1.decode('utf-8')
quit_msg1 = ' هل انت متأكد من مسح الفئة '
quit_msg = quit_msg1.decode('utf-8')
result = QtGui.QMessageBox.critical(Dialog, quit_title, quit_msg, QtGui.QMessageBox.Yes | QtGui.QMessageBox.No, QtGui.QMessageBox.No)
if result == QtGui.QMessageBox.Yes:
    try:
        conn = sqlite3.connect('storage/container.db')
        conn.row_factory = lambda c, row: row[0]
        c = conn.cursor()
        c.execute("PRAGMA foreign_keys = 1")
        c.execute("DELETE FROM categories WHERE category_name = (?)", (deleted, ))
        conn.commit()
        conn.close()
    except sqlite3.IntegrityError:
        # Do whatever

相关问题 更多 >