简体   繁体   English

使用 flask sqlalchemy.exc.IntegrityError 时出错:(sqlite3.IntegrityError) UNIQUE 约束失败

[英]Error when working with flask sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) UNIQUE constraint failed

I am very new with this and I'm just trying out flask and I can't seem to be able to get around this issue with 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)

from project.py:来自项目.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')

This is from database_setup.py:这是来自 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)

Full traceback:完整追溯:

Traceback (most recent call last): File "C:\Users\audri\AppData\Roaming\Python\Python37\site-packages\flask\app.py", line 2309, in call return self.wsgi_app(environ, start_response) File "C:\Users\audri\AppData\Roaming\Python\Python37\site-packages\flask\app.py", line 2295, in wsgi_app response = self.handle_exception(e) File "C:\Users\audri\AppData\Roaming\Python\Python37\site-packages\flask\app.py", line 1741, in handle_exception reraise(exc_type, exc_value, tb) File "C:\Users\audri\AppData\Roaming\Python\Python37\site-packages\flask_compat.py", line 35, in reraise raise value File "C:\Users\audri\AppData\Roaming\Python\Python37\site-packages\flask\app.py", line 2292, in wsgi_app response = self.full_dispatch_request() File "C:\Users\audri\AppData\Roaming\Python\Python37\site-packages\flask\app.py", line 1815, in full_dispatch_request rv = self.handle_user_exception(e) File "C:\Users\audri\AppData\Roaming\Python\Python37\site-packages\flask\app.py", line 1718, in handle_user_exceptio追溯(最近一次调用最后一次):文件“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 response = 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 行,在重新提高值文件“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_exceptio n reraise(exc_type, exc_value, tb) File "C:\Users\audri\AppData\Roaming\Python\Python37\site-packages\flask_compat.py", line 35, in reraise raise value File "C:\Users\audri\AppData\Roaming\Python\Python37\site-packages\flask\app.py", line 1813, in full_dispatch_request rv = self.dispatch_request() File "C:\Users\audri\AppData\Roaming\Python\Python37\site-packages\flask\app.py", line 1799, in dispatch_request return self.view_functionsrule.endpoint File "D:\Audric\Work\firstcode\python\FCASIS\AC403(FLASK-SHARED)\deploy -experimental\project.py", line 80, in register session.commit() File "C:\Users\audri\AppData\Roaming\Python\Python37\site-packages\sqlalchemy\orm\scoping.py", line 153, in do return getattr(self.registry(), name)(*args, **kwargs) File "C:\Users\audri\AppData\Roaming\Python\Python37\site-packages\sqlalchemy\orm\session.py", line 943, in commit self.transaction.commit() File "C:\Users\audri\AppData\Roaming\Python\Python37\site-packages\sqlalchemy\orm\session.py", line 467, n reraise(exc_type, exc_value, tb) File "C:\Users\audri\AppData\Roaming\Python\Python37\site-packages\flask_compat.py", 第35行,在reraise raise value File "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", line 1799, in 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 行,在 do return 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 行, in commit self._prepare_impl() File "C:\Users\audri\AppData\Roaming\Python\Python37\site-packages\sqlalchemy\orm\session.py", line 447, in _prepare_impl self.session.flush() File "C:\Users\audri\AppData\Roaming\Python\Python37\site-packages\sqlalchemy\orm\session.py", line 2254, in flush self._flush(objects) File "C:\Users\audri\AppData\Roaming\Python\Python37\site-packages\sqlalchemy\orm\session.py", line 2380, in _flush transaction.rollback(_capture_exception=True) File "C:\Users\audri\AppData\Roaming\Python\Python37\site-packages\sqlalchemy\util\langhelpers.py", line 66, in exit compat.reraise(exc_type, exc_value, exc_tb) File "C:\Users\audri\AppData\Roaming\Python\Python37\site-packages\sqlalchemy\util\compat.py", line 249, in reraise raise value File "C:\Users\audri\AppData\Roaming\Python\Python37\site-packages\sqlalchemy\orm\session.py", line 2344, in _flush flush_context.execute() File "C:\Users\audri\AppData\Roaming\Python\Python37\site-packages\sqlalchemy\orm\unitofwork.py", 在提交 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 行,在exit compat.reraise(exc_type, exc_value, exc_tb) File "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”,第 2344 行,在 _flush flush_context.execute() 文件“C:\Users\audri\AppData\Roaming\Python\Python37\site-packages\sqlalchemy\orm\unitofwork.py”, line 391, in execute rec.execute(self) File "C:\Users\audri\AppData\Roaming\Python\Python37\site-packages\sqlalchemy\orm\unitofwork.py", line 556, in execute uow File "C:\Users\audri\AppData\Roaming\Python\Python37\site-packages\sqlalchemy\orm\persistence.py", line 181, in save_obj mapper, table, insert) File "C:\Users\audri\AppData\Roaming\Python\Python37\site-packages\sqlalchemy\orm\persistence.py", line 866, in _emit_insert_statements execute(statement, params) File "C:\Users\audri\AppData\Roaming\Python\Python37\site-packages\sqlalchemy\engine\base.py", line 948, in execute return meth(self, multiparams, params) File "C:\Users\audri\AppData\Roaming\Python\Python37\site-packages\sqlalchemy\sql\elements.py", line 269, in _execute_on_connection return connection._execute_clauseelement(self, multiparams, params) File "C:\Users\audri\AppData\Roaming\Python\Python37\site-packages\sqlalchemy\engine\base.py", line 1060, in _execute_clauseelement compiled_sql, distilled_params File "C:\User第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", line 181, in save_obj mapper, table, insert) File "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", line 948, in execute return meth(self, multiparams, params) File "C:\Users\audri\AppData\Roaming\Python\Python37\site-packages\sqlalchemy\sql\elements. py”,第 269 行,在 _execute_on_connection return connection._execute_clauseelement(self, multiparams, params) 文件“C:\Users\audri\AppData\Roaming\Python\Python37\site-packages\sqlalchemy\engine\base.py”中,行1060, 在_execute_clauseelement compiled_sql, distilled_params File "C:\User s\audri\AppData\Roaming\Python\Python37\site-packages\sqlalchemy\engine\base.py", line 1200, in _execute_context context) File "C:\Users\audri\AppData\Roaming\Python\Python37\site-packages\sqlalchemy\engine\base.py", line 1413, in _handle_dbapi_exception exc_info File "C:\Users\audri\AppData\Roaming\Python\Python37\site-packages\sqlalchemy\util\compat.py", line 265, in raise_from_cause reraise(type(exception), exception, tb=exc_tb, cause=cause) File "C:\Users\audri\AppData\Roaming\Python\Python37\site-packages\sqlalchemy\util\compat.py", line 248, in reraise raise value.with_traceback(tb) File "C:\Users\audri\AppData\Roaming\Python\Python37\site-packages\sqlalchemy\engine\base.py", line 1193, in _execute_context context) File "C:\Users\audri\AppData\Roaming\Python\Python37\site-packages\sqlalchemy\engine\default.py", line 509, in do_execute cursor.execute(statement, parameters) sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) UNIQUE constraint failed: Login Info.username [SQL: ' s\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(type(exception), exception, 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 (?, ?)'] [parameters: ('audyappy', 'secret')] (Background on this error at: http://sqlalche.me/e/gkpj )插入“登录信息”(用户名,密码)VALUES(?,?)'] [参数:('audyappy','secret')](此错误的背景信息: http ://sqlalche.me/e/gkpj )

I can't seem to find the issue so it would be great if you would help me.我似乎找不到问题所在,所以如果您能帮助我,那就太好了。 Thanks!谢谢!

You have a unicity constraint on the username column of the table where you are trying to insert data: username = Column(String, nullable=False, unique=True) 您试图插入数据的表的用户名列具有唯一性约束: username = Column(String, nullable=False, unique=True)

The username value you are trying to insert is already there in that table. 该表中已经存在您要插入的用户名值。 Try deleting the problematic record and rerun your insert or run your insert with a different value. 尝试删除有问题的记录,然后重新运行您的插入或以其他值运行您的插入。

Looking at your output this seems to be what caused the problem. 查看您的输出,这似乎是导致问题的原因。

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

The session.commit() is probably not able to commit data to the database. session.commit()可能无法将数据提交到数据库。 I think you have not setup your database properly. 我认为您尚未正确设置数据库。 Since you are using Flask I would suggest using Flask-SQLAlchemy which makes using SQLAlchemy on flask apps much easier. 由于您使用的是Flask,因此建议您使用Flask-SQLAlchemy,这使得在Flask应用程序上使用SQLAlchemy更加容易。

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

Hope this helps. 希望这可以帮助。

Maybe you re-commit the same data to database.也许您将相同的数据重新提交到数据库。 And as for primary key is unique, so there get an error.而主键是唯一的,所以会报错。 Try this:试试这个:

try:
    session.commit()
except Exception as e:
    print(e)

to replace your code:替换你的代码:

session.commit()

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

相关问题 sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) NOT NULL 约束失败 - sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) NOT NULL constraint failed sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) NOT NULL 约束失败:user.id - sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) NOT NULL constraint failed: user.id sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) NOT NULL 约束失败:user.words - sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) NOT NULL constraint failed: user.words sqlalchemy.exc.IntegrityError:唯一约束失败 - sqlalchemy.exc.IntegrityError: UNIQUE constraint failed sqlalchemy.exc.IntegrityError - sqlalchemy.exc.IntegrityError 烧瓶-(sqlite3.IntegrityError)NOT NULL约束即使在迁移后也失败 - Flask - (sqlite3.IntegrityError) NOT NULL constraint failed even after migration 尝试更新值时,烧瓶SQLAlchemy IntegrityError“唯一约束失败” - Flask SQLAlchemy IntegrityError “UNIQUE constraint failed” when trying to update values 在烧瓶中将数据输入数据库时​​出错(sqlite3.IntegrityError) - Error when entering data into database in flask (sqlite3.IntegrityError) 为什么我收到sqlalchemy.exc.IntegrityError - Why I receive sqlalchemy.exc.IntegrityError web2py:sqlite3.IntegrityError'>(外键约束失败) - web2py: sqlite3.IntegrityError'>(foreign key constraint failed)
 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM