我正在开发一个 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)
您的用户名列应该只有唯一的名称。
第一次添加
'Joey.O'
时效果很好,下次尝试插入 'Joey.O'
时它会抛出:
sqlalchemy.exc.IntegrityError:(sqlite3.IntegrityError)唯一约束失败:user.username
更改用户名并尝试插入vakues。