首页 > 解决方案 > 使用烧瓶 sqlalchemy.exc.IntegrityError 时出错:(sqlite3.IntegrityError) UNIQUE 约束失败

问题描述

我对此很陌生,我只是在尝试烧瓶,我似乎无法用 sqlalchemy 解决这个问题

sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) UNIQUE constraint 
failed: Login Info.username [SQL: 'INSERT INTO "Login Info" (username, 
password) VALUES (?, ?)'] [parameters: ('audyappy', 'secret')] (Background on 
this error at: http://sqlalche.me/e/gkpj)

来自项目.py:

@app.route('/register', methods=['GET',"POST"])
def register():
    if request.method == "POST":
        newUser = Login_Info(username=request.form['username'], password=request.form['password'])
        session.add(newUser)
        flash('You have registered successfully')
        session.commit()
        return redirect(url_for('login'))
    else:
        return render_template('register.html')

这来自 database_setup.py:

class Login_Info(Base):
    __tablename__ = 'Login Info'
    id = Column(Integer, primary_key=True)
    username = Column(String, nullable=False, unique=True)
    password = Column(String, nullable=False)

完整追溯:

Traceback(最近一次通话最后一次):文件“C:\Users\audri\AppData\Roaming\Python\Python37\site-packages\flask\app.py”,第 2309 行,通话中 返回 self.wsgi_app(environ, start_response) 文件“C:\Users\audri\AppData\Roaming\Python\Python37\site-packages\flask\app.py”,第 2295 行,在 wsgi_app 响应 = self.handle_exception(e)文件“C:\Users\audri\AppData\Roaming\Python\Python37\site-packages\flask\app.py”,第 1741 行,handle_exception reraise(exc_type, exc_value, tb) 文件“C:\Users\audri\ AppData\Roaming\Python\Python37\site-packages\flask_compat.py”,第 35 行,在 reraise raise 值文件“C:\Users\audri\AppData\Roaming\Python\Python37\site-packages\flask\app.py ",第 2292 行,在 wsgi_app 响应 = self.full_dispatch_request() 文件“C:\Users\audri\AppData\Roaming\Python\Python37\site-packages\flask\app.py”,第 1815 行,在 full_dispatch_request rv = self .handle_user_exception(e) 文件“C:\Users\audri\AppData\Roaming\Python\Python37\site-packages\flask\app.py”,第 1718 行,在 handle_user_exception reraise(exc_type, exc_value, tb) 文件“C:\ Users\audri\AppData\Roaming\Python\Python37\site-packages\flask_compat.py”,第 35 行,在 reraise raise 值文件“C:\Users\audri\AppData\Roaming\Python\Python37\site-packages\flask \app.py”,第 1813 行,在 full_dispatch_request rv = self.dispatch_request() 文件“C:\Users\audri\AppData\Roaming\Python\Python37\site-packages\flask\app.py”,第 1799 行,在dispatch_request return self.view_functionsrule.endpoint File "D:\Audric\Work\firstcode\python\FCASIS\AC403(FLASK-SHARED)\deploy -experimental\project.py",第 80 行,在注册 session.commit() 文件中" C:\Users\audri\AppData\Roaming\Python\Python37\site-packages\sqlalchemy\orm\scoping.py",第 153 行,返回 getattr(self.registry(), name)(*args, **kwargs)文件“C:\Users\audri\AppData\Roaming\Python\Python37\site-packages\sqlalchemy\orm\session.py”,第 943 行,提交 self.transaction.commit() 文件“C:\Users\audri \AppData\Roaming\Python\Python37\site-packages\sqlalchemy\orm\session.py”,第 467 行,提交 self._prepare_impl() 文件“C:\Users\audri\AppData\Roaming\Python\Python37\site -packages\sqlalchemy\orm\session.py”,第 447 行,在 _prepare_impl self.session.flush() 文件“C:\Users\audri\AppData\Roaming\Python\Python37\site-packages\sqlalchemy\orm\session .py”,第 2254 行,在刷新 self._flush(objects) 文件“C:\Users\audri\AppData\Roaming\Python\Python37\site-packages\sqlalchemy\orm\session.py”,第 2380 行,在 _flush transaction.rollback(_capture_exception=True) 文件“C:\Users\audri\AppData\ Roaming\Python\Python37\site-packages\sqlalchemy\util\langhelpers.py",第 66 行,在出口 compat.reraise(exc_type, exc_value, exc_tb) 文件“C:\Users\audri\AppData\Roaming\Python\Python37\site-packages\sqlalchemy\util\compat.py”,第 249 行,在 reraise raise 值文件“C :\Users\audri\AppData\Roaming\Python\Python37\site-packages\sqlalchemy\orm\session.py”,第 2344 行,在 _flush flush_context.execute() 文件“C:\Users\audri\AppData\Roaming\ Python\Python37\site-packages\sqlalchemy\orm\unitofwork.py”,第 391 行,在执行 rec.execute(self) 文件“C:\Users\audri\AppData\Roaming\Python\Python37\site-packages\sqlalchemy \orm\unitofwork.py”,第 556 行,在 save_obj 映射器中执行 uow 文件“C:\Users\audri\AppData\Roaming\Python\Python37\site-packages\sqlalchemy\orm\persistence.py”,第 181 行,表,插入)文件“C:\Users\audri\AppData\Roaming\Python\Python37\site-packages\sqlalchemy\orm\persistence.py”,第 866 行,在 _emit_insert_statements 执行(语句,参数)文件“C:\Users\audri\AppData\Roaming\ Python\Python37\site-packages\sqlalchemy\engine\base.py”,第 948 行,在执行中返回 meth(self, multiparams, params) 文件“C:\Users\audri\AppData\Roaming\Python\Python37\site- packages\sqlalchemy\sql\elements.py",第 269 行,在 _execute_on_connection 返回连接。_execute_clauseelement(self, multiparams, params) 文件“C:\Users\audri\AppData\Roaming\Python\Python37\site-packages\sqlalchemy\ engine\base.py”,第 1060 行,在 _execute_clauseelementcompiled_sql,distilled_pa​​rams 文件“C:\Users\audri\AppData\Roaming\Python\Python37\site-packages\sqlalchemy\engine\base.py”中,第 1200 行,在 _execute_context 上下文中)文件“C:\Users\audri\AppData\Roaming\Python\Python37\site-packages\sqlalchemy\engine\base.py”,第 1413 行,在 _handle_dbapi_exception exc_info 文件“C:\Users\ audri\AppData\Roaming\Python\Python37\site-packages\sqlalchemy\util\compat.py”,第 265 行,在 raise_from_cause reraise(类型(异常),异常,tb=exc_tb,cause=cause)文件“C:\ Users\audri\AppData\Roaming\Python\Python37\site-packages\sqlalchemy\util\compat.py”,第 248 行,在 reraise raise value.with_traceback(tb) 文件“C:\Users\audri\AppData\Roaming\ Python\Python37\site-packages\sqlalchemy\engine\base.py”,第 1193 行,在 _execute_context 上下文中)文件“C:\Users\audri\AppData\Roaming\Python\Python37\site-packages\sqlalchemy\engine\default .py”,第 509 行,在 do_execute cursor.execute(statement, parameters) sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) UNIQUE constraint failed: Login Info.username [SQL: 'INSERT INTO "Login Info" (username, password) VALUES (?, ?) '] [参数:('audyappy','secret')](此错误的背景:http://sqlalche.me/e/gkpj )

我似乎找不到问题,所以如果你能帮助我,那就太好了。谢谢!

标签: pythonsqlalchemy

解决方案


您在尝试插入数据的表的用户名列上有一个唯一性约束:username = Column(String, nullable=False, unique=True)

您尝试插入的用户名值已经存在于该表中。尝试删除有问题的记录并重新运行插入或使用不同的值运行插入。


推荐阅读