[英]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.