SQLAlchemy错误“在删除时”

时间:2018-04-29 16:03:10

标签: database flask sqlalchemy

我是Flask的新手,我正在尝试删除用户。 我已经可以创建一个用户,它说缺少1个参数:

add_user.html

    <form method="POST" action="/del_user">
        <label> ID: </label>
        <input id="id" name ="id" type="text" />
        <input type="submit" value="Delete"/>
    </form>

app.py

from flask import Flask, render_template, request, redirect, url_for
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)
#Set the application in debug mode so that the server is reloaded on any code change & helps debug
app.config['DEBUG'] = True
app.config['SQLALCHEMY_DATABASE_URI'] = 'postgresql://postgres:********@localhost/projetofinal'
db = SQLAlchemy(app)

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True)
    email = db.Column(db.String(120), unique=True)

    def __init__(self, username, email):
        self.username = username
        self.email = email

    def __repr__(self):
        return '<User %r>' % self.username

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


@app.route('/post_user', methods=['POST'])
def post_user():
    user = User(request.form['username'], request.form['email'])
    db.session.add(user) #add object
    db.session.commit()  #save 
    return redirect(url_for('index'))

@app.route('/del_user', methods=['POST'])
def del_user():
    user = User(request.form['id']) #ERROR LINE
    user1 = db.session.query(User).filter(User.id==user.id).first()
    db.session.delete(user1)
    db.session.commit()   
    return redirect(url_for('index'))

if __name__=="__main__":
    app.run()

TypeError: init ()缺少1个必需的位置参数:'email'

1 个答案:

答案 0 :(得分:0)

只需从表单中获取id,将其转换为整数并查询数据库。

@app.route('/del_user', methods=['POST'])
def del_user():
    user = int(request.form['id'])
    user1 = db.session.query(User).filter(User.id==user.id).first()
    db.session.delete(user1)
    db.session.commit()   
    return redirect(url_for('index'))

另外检查您的数据库查询是否返回用户对象,以确保您不会尝试删除不存在的用户并获得其他错误

if user1:
    db.session.delete(user1)
else:
    flash('the record requested was not found')
    return redirect(url_for('index'))

了解如何使用flash here优雅地显示错误消息

最后,除了使用文本输入删除之外,您可以使用选择使用现有用户的值,以便值为用户ID,选项文本是用户名,以确保尝试删除仅使用现有用户ID