烧瓶 - 使用db.session.delete()删除DB中的记录

问题描述:

我在我的SQLite3数据库中有Students表。此表具有ID和名称字段。烧瓶 - 使用db.session.delete()删除DB中的记录

这里是我的app.py

#!/usr/bin/python 

from flask import Flask, render_template, json, request, flash,session,redirect,url_for 
from flask_sqlalchemy import SQLAlchemy 
import sqlite3 



conn = sqlite3.connect('test.db') 





app = Flask(__name__) 
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///students.sqlite3' 
db = SQLAlchemy(app) 









class Students(db.Model): 
    id = db.Column('student_id',db.Integer, primary_key=True) 
    name = db.Column(db.String(80), unique=True) 

    def __init__(self, name, id): 
     self.name = name 
     self.id = id 

    def __repr__(self): 
     return '<Students %r>' % self.name 


db.create_all() 


@app.route("/") 
def main(): 
    return render_template('index.html') 




@app.route('/new', methods = ['GET', 'POST']) 
def new(): 
    if request.method == 'POST': 
     if not request.form['name'] or not request.form['id']: 
     flash('Please enter all the fields', 'error') 
     else: 
     student = Students(request.form['name'], request.form['id']) 
     db.session.add(student) 
     db.session.commit() 

     flash('Record was successfully added') 
     return redirect(url_for('show_all')) 
    return render_template('new.html') 


@app.route('/deleted', methods = ['GET', 'POST']) 
def deleted(): 

    if request.method == 'POST': 
     if not request.form['name'] or not request.form['id']: 
      flash('Please enter the right number you asshole!','error') 
     else: 
      student1 = Students(request.form['id']) 
      Students.query.filter_by(id='student1').delete() 
      db.session.commit() 

      flash('Record was deleted successfully ') 
      return redirect(url_for('show_all')) 
    return render_template('deleted.html') 




@app.route("/admin") 
def show_all(): 
    return render_template('show_all.html', Students = Students.query.all()) 

我只是复制从那里我添加一条记录,到了那里,我删除了记录,但没有名字费尔德模板,现在我要删除仅通过ID记录。我在堆栈溢出得到这个从前面的问题:

User.query.filter_by(id=123).delete() 

因此后我要求值从ID的形式,我分配到一个变量students1然后才能删除它,它传递给查询。对其进行了重新定向并重新调整了show_all模板。

因此,使这个:

@app.route('/deleted', methods = ['GET', 'POST']) 
def deleted(): 

    if request.method == 'POST': 
     if not request.form['name'] or not request.form['id']: 
      flash('Please enter the right number you asshole!','error') 
     else: 
      student1 = Students(request.form['id']) 
      Students.query.filter_by(id='student1').delete() 
      db.session.commit() 

      flash('Record was deleted successfully ') 
      return redirect(url_for('show_all')) 
    return render_template('deleted.html') 

但我不断收到一个400错误请求错误。任何帮助表示赞赏。我刚开始学习数据库。

这里的HTML:

deleted.html

<!DOCTYPE html> 
<html> 
    <body> 

     <h3>SCS EC Attendance Kickout the student</h3> 
     <hr/> 

     {%- for category, message in get_flashed_messages(with_categories = true) %} 
     <div class = "alert alert-danger"> 
      {{ message }} 
     </div> 
     {%- endfor %} 

     <form action = "{{ request.path }}" method = "post"> 
     <label for = "id">Id Number</label><br> 
     <input type = "text" name = "id" placeholder = "Student Id" /><br> 
     <input type = "submit" value = "Delete this motherfucker!" /> 

     </form> 

    </body> 
</html> 

show_all.html

<!DOCTYPE html> 
<html lang = "en"> 
    <head> 
     <link rel="stylesheet" type="text/css" href="table.css"> 
    </head> 
    <body> 

     <h3> 
     <a href = "{{ url_for('show_all') }}">SCS EC Attendance System</a> 
     </h3> 

     <hr/> 
     {%- for message in get_flashed_messages() %} 
     {{ message }} 
     {%- endfor %} 

     <h3>Students (<a href = "{{ url_for('new') }}">Add Student 
     </a>)</h3> 

     <h3>Students (<a href = "{{ url_for('deleted') }}">Massacre Student 
     </a>)</h3> 



    <table class="responstable"> 
    <thead> 

    <tr> 
    <th>Name</th> 
    <th>Id</th> 
    </tr> 
    </thead> 


     <tbody> 
      {% for Student in Students %} 
       <tr> 
        <td>{{ Student.name }}</td> 
        <td>{{ Student.id }}</td> 

      {% endfor %} 
     </tbody> 
     </table> 
        <p class="lead"></p> 
      <p><a class="btn btn-lg btn-success" href="new" role="button">Sign up today</a> 
       <a class="btn btn-lg btn-success" href="show_all" role="button">Administrate</a> 
      </p> 

    </body> 
</html> 
+0

你是否将数据库附加到应用程序?我在代码中看不到'db.init_app(app)'。 – nos

+0

我刚加了,谢谢!但它确实没有解决问题。 :( –

我不是很肯定,这已删除的记录。

Students.query.filter_by(id='student1').delete() 

尝试的

x = Students.query.filter_by(id='student1') 
db.session.delete(x) 
db.session.commit() 

的标准方法只是尝试和评论你的回应。

+0

相同,它会得到400错误的请求,我会添加HTML,可能是因为这个原因:(@reevkandari –

+0

我亲爱的朋友,你已经把deleted.html命名为deleted.py ..就是那个有问题的? – reevkandari

+0

朋友,它会影响它吗?我会尝试更改名称 –