我将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中完全没有任何作用,我希望用户知道他能够删除它,因为数据库中有与它的连接
只需将其包装在try/except中并捕获sqlite3.IntegrityError。然后,如果出现错误,您几乎可以做任何事情
(由于您正在启动数据库并在这里执行所有操作,因此我建议将其重构为几个函数….)
但这里有一个例子,我跳过了GUI部分
相关问题 更多 >
编程相关推荐