2017-01-19 120 views
0

我是SQLAlchemy和HTML表單的新手,需要了解如何刪除我的dB表中與我的HTML表單中選中的複選框相對應的多行。就目前而言,只有第一個選中的項目正在從表格中刪除。我希望這可以在SQLAlchemy方面沒有for循環完成?multiple複選框sqlalchemy刪除

這裏是我的HTML代碼: -

<ul> 
      {% for alert in alerts %} 
        <li> <input name="alert_id" type="checkbox" value="{{ alert.alert_id }}"/> Ticker:{{ alert.ticker }} Price:{{ alert.price }}</li> 
      {% endfor %} 
</ul> 

,燒瓶蟒蛇SQLAlchemy的腳本: -

if request.method == "POST": 
     if request.form["alert_id"]: 
      Alert.query.filter(Alert.alert_id == request.form["alert_id"]).delete() 
      db.session.commit() 

回答

0

此行

Alert.query.filter(Alert.alert_id == request.form["alert_id"]).delete() 

應該

Alert.query.filter(Alert.alert_id.in_(request.form["alert_id"])).delete() 

它做了SELECT * FROM <table_name> WHERE alert_id IN (<val>, <val2>)

而且,這是很好的堅持request.form.getlist("alert_id"),而不是request.form["alert_id"]所以你可以始終確保你得到的情況下,alert_id一個list,而不是一個KeyError不存在。

+0

謝謝約瑟夫。你能否推薦一個網站來介紹SQLAlchemy以及一個很好的參考網站。我很可能會遇到很多像這樣的問題。 – dbm

+0

樂意幫忙,@dbm。官方文檔是參考https://docs.sqlalchemy.org/en/latest/core/tutorial.html的最佳來源。 這是一個非常詳細的作弊表 - https://github.com/crazyguitar/pysheeet/blob/master/docs/notes/python-sqlalchemy.rst –