尝试使用 SQLAlchemy 在 Flask 中添加新用户时出现 IntegrityError

问题描述 投票:0回答:1

我正在开发一个 Flask 应用程序,其中有一个表单允许用户输入用户名和密码。提交后,用户的信息应与所有先前输入的用户一起显示在另一个网页上。

我遇到的问题是,我第一次提交表单时,它工作得很好。但是,当我尝试添加另一个用户时,出现以下错误:

sqlalchemy.exc.IntegrityError:(sqlite3.IntegrityError)唯一约束失败:user.username

[SQL:插入用户(用户名,电子邮件)值(?,?)]

[参数:('Joey.O', '[电子邮件受保护]')]

from flask import Flask, render_template, url_for, redirect, request
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy.orm import DeclarativeBase

class Base(DeclarativeBase):
    pass

db = SQLAlchemy(model_class=Base)
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///project.db'
db.init_app(app)

from sqlalchemy.orm import Mapped, mapped_column

class User(db.Model):
    id: Mapped[int] = mapped_column(primary_key=True)
    username: Mapped[str] = mapped_column(unique=True)
    email: Mapped[str]

with app.app_context():
    db.create_all()

@app.route('/')
@app.route('/home')
def home():
    return render_template('home.html', title='Home Page')

@app.route('/list')
def user_list():
    users = db.session.execute(db.select(User).order_by(User.username)).scalars()
    return render_template('user_list.html', title='User List', users=users)

@app.route('/create_user', methods=['GET', 'POST'])
def create_user():
    if request.method == 'POST':
        user = User(
            username=request.form['username'],
            email=request.form['email'],
        )
        db.session.add(user)
        db.session.commit()
        return redirect(url_for('user_list', id=user.id))
        
    return render_template('create_user.html', title='Create User')

if __name__ == '__main__':
    app.run(debug=True)
python flask flask-sqlalchemy
1个回答
0
投票

您的用户名列应该只有唯一的名称。

第一次添加

'Joey.O'
时效果很好,下次尝试插入
'Joey.O'
时它会抛出:

sqlalchemy.exc.IntegrityError:(sqlite3.IntegrityError)唯一约束失败:user.username

更改用户名并尝试插入vakues。

© www.soinside.com 2019 - 2024. All rights reserved.