sqlite 尝试使用SQLAlchemy执行`db.session.commit()`时,会抛出IntegrityError

vnjpjtjt  于 2023-10-23  发布在  SQLite
关注(0)|答案(1)|浏览(172)

问题

我是Flask和后端的初学者,我真的不知道任何SQL。
我一直在Youtube上放一个关于创建 flask 应用程序的教程,当我尝试添加广告管理员用户时,我遇到了一个错误。我试图重新创建一个基本的应用程序,并试图缩小问题,只创建管理模型,并试图把东西放进去,它显示了同样的错误。

我的APP

  1. from flask import Flask
  2. from flask_sqlalchemy import SQLAlchemy
  3. app = Flask(__name__)
  4. app.config['SECRET_KEY'] = 'secret'
  5. app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///test.db'
  6. db = SQLAlchemy(app)
  7. class Admin(db.Model):
  8. id = db.Column(db.Integer, primary_key=True)
  9. username = db.Column(db.String(20), nullable=False)
  10. password = db.Column(db.String(20), nullable=False)
  11. def __repr__(self):
  12. return f"Admin('{self.username}', '{self.password}')"
  13. @app.route('/')
  14. def hello_world():
  15. admin = Admin(username='Justas', password='test')
  16. db.session.add(admin)
  17. db.session.commit() # Error at here
  18. return 'Hello, World!'
  19. if __name__ == '__main__':
  20. app.run(debug=True)

错误

这显示在终端当我尝试运行它python app.py

  1. Traceback (most recent call last):
  2. File "C:\Users\Sarunas\Desktop\test APP\my_app\env\Lib\site-packages\sqlalchemy\engine\base.py", line 1283, in _execute_context
  3. self.dialect.do_execute(
  4. File "C:\Users\Sarunas\Desktop\test APP\my_app\env\Lib\site-packages\sqlalchemy\engine\default.py", line 590, in do_execute
  5. cursor.execute(statement, parameters)
  6. sqlite3.IntegrityError: UNIQUE constraint failed: admin.username
  7. The above exception was the direct cause of the following exception:
  8. ...
  9. sqlalchemy.exc.IntegrityError: (sqlite3.IntegrityError) UNIQUE constraint failed: admin.username
  10. [SQL: INSERT INTO admin (username, password) VALUES (?, ?)]
  11. [parameters: ('Justas', 'test')]
  12. (Background on this error at: http://sqlalche.me/e/gkpj)
krcsximq

krcsximq1#

错误消息表明您正在尝试创建一个已经存在的管理员。您可以通过在创建新管理员之前添加检查来避免此问题;

  1. if db.session.query(Admin).filter_by(username='Justas').count() < 1:
  2. admin = Admin(username='Justas', password='test')
  3. db.session.add(admin)
  4. db.session.commit()
  5. return 'Hello, World!'

请用上面的代码测试一下。

相关问题