2015-04-27 55 views
0

在提交之前是否有任何方法檢查外鍵約束?我知道的唯一方法是趕上sqlite3.IntegrityError在提交之前檢查外鍵約束

我有一個使用Flask-SQLAlchemy的Flask應用程序。其中一個表具有外鍵約束。如果外鍵引用的行被刪除,則引發IntegrityError。我想給用戶更好的反饋。是否有可能找出要顯示的鏈接行?

+0

假設有辦法檢查...並檢查,然後同時檢查一行後檢查,但在您提交之前,您的應用程序會是什麼重刑呢? – SingleNegationElimination

回答

2

您可以處理錯誤:

try: 
    db.session.commit() 
except IntegrityError: 
    return render_template('error.html', msg="You can't delete this!") 

甚至包括關於導致錯誤的行的信息:

post = Post.query.get(123) # object we are trying to delete 
comments = post.comments # foreign key preventing deletion 

return render_template('error.html', msg="You can't delete this!", comments=comments) 

在模板:

<p>Delete these comments first:</p> 

{% for comment in comments %} 
    {{ comment.text }} 
{% endfor %} 
+0

Thx爲您的答案,我選擇了兩種解決方案的組合:-) – tonka