使用烧瓶sqlalchemy.exc.IntegrityError时出错:(sqlite3.IntegrityError)唯一约束失败

时间:2018-08-18 09:02:28

标签: python sqlalchemy

我对此很陌生,我只是尝试使用烧瓶,但似乎无法使用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)

来自project.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)

完整追溯:

  

回溯(最近通话最近):文件   “ C:\ Users \ audri \ AppData \ Roaming \ Python \ Python37 \ site-packages \ flask \ app.py”,   第2309行,在致电       返回self.wsgi_app(环境,start_response)文件“ C:\ Users \ audri \ AppData \ Roaming \ Python \ Python37 \ site-packages \ flask \ app.py”,   wsgi_app中的第2295行       响应= self.handle_exception(e)文件“ C:\ Users \ audri \ AppData \ Roaming \ Python \ Python37 \ site-packages \ flask \ app.py”,   第1741行,在handle_exception中       重新提升(exc_type,exc_value,tb)文件“ C:\ Users \ audri \ AppData \ Roaming \ Python \ Python37 \ site-packages \ flask_compat.py”,   第35行,加价       提高价值文件“ C:\ Users \ audri \ AppData \ Roaming \ Python \ Python37 \ site-packages \ flask \ app.py”,   wsgi_app中的2292行       响应= 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中       重新提升(exc_type,exc_value,tb)文件“ C:\ Users \ audri \ AppData \ Roaming \ Python \ Python37 \ site-packages \ flask_compat.py”,   第35行,加价       提高价值文件“ 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中       返回self.view_functionsrule.endpoint文件“ 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”,   _prepare_impl中的第447行       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”,   _flush中的第2380行       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行,加价       提高价值文件“ C:\ Users \ audri \ AppData \ Roaming \ Python \ Python37 \ site-packages \ sqlalchemy \ orm \ session.py”,   _flush中的第2344行       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行       uow文件“ C:\ Users \ audri \ AppData \ Roaming \ Python \ Python37 \ site-packages \ sqlalchemy \ orm \ persistence.py”,   第181行,在save_obj中       映射器,表,插入)文件“ C:\ Users \ audri \ AppData \ Roaming \ Python \ Python37 \ site-packages \ sqlalchemy \ orm \ persistence.py”,   _emit_insert_statements中的第866行       执行(语句,参数)文件“ 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”,   _execute_on_connection中的第269行       返回连接。_execute_clauseelement(自己,多参数,参数)文件   “ C:\ Users \ audri \ AppData \ Roaming \ Python \ Python37 \ site-packages \ sqlalchemy \ engine \ base.py”,   第1060行,在_execute_clauseelement中       编译后的SQL,stilled_pa​​rams文件“ C:\ Users \ audri \ AppData \ Roaming \ Python \ Python37 \ site-packages \ sqlalchemy \ engine \ base.py”,   _execute_context中的第1200行       上下文)文件“ C:\ Users \ audri \ AppData \ Roaming \ Python \ Python37 \ site-packages \ sqlalchemy \ engine \ base.py”,   _handle_dbapi_exception中的第1413行       exc_info文件“ C:\ Users \ audri \ AppData \ Roaming \ Python \ Python37 \ site-packages \ sqlalchemy \ util \ compat.py”,   第265行,在raise_from_cause中       重新引发(类型(异常),异常,tb = exc_tb,原因=原因)文件“ C:\ Users \ audri \ AppData \ Roaming \ Python \ Python37 \ site-packages \ sqlalchemy \ util \ compat.py”,   第248行,加价       提高价值。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”,   do_execute中的509行       cursor.execute(语句,参数)sqlalchemy.exc.IntegrityError:(sqlite3.IntegrityError)唯一   约束失败:登录信息。用户名[SQL:'INSERT INTO“登录信息”   (用户名,密码)VALUES(?,?)'] [参数:('audyappy',   '秘密']](此错误的背景位于:http://sqlalche.me/e/gkpj

我似乎找不到问题,因此如果您能帮助我,那将是很好的。谢谢!

2 个答案:

答案 0 :(得分:0)

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

您要插入的用户名值已在该表中。尝试删除有问题的记录,然后重新运行您的插入或使用其他值运行您的插入。

答案 1 :(得分:0)

看看您的输出,似乎是导致问题的原因。

  

在注册session.commit()文件的第80行,“ D:\ Audric \ Work \ firstcode \ python \ FCASIS \ AC403(FLASK-SHARED)\ deploy -experimental \ project.py”

session.commit()可能无法将数据提交到数据库。我认为您尚未正确设置数据库。由于您使用的是Flask,因此建议您使用Flask-SQLAlchemy,这使得在Flask应用程序上使用SQLAlchemy更加容易。

查看有关此主题的出色教程。 https://blog.miguelgrinberg.com/post/the-flask-mega-tutorial-part-iv-database

希望这会有所帮助。