Попытка выполнить db.session.commit () с помощью SQLalchemy выдает ошибку. Как это исправить? - PullRequest
0 голосов
/ 17 июня 2020

Проблема

Я новичок в Flask и бэк-энде в целом, и у меня сейчас нет SQL ...

Я читал на Youtube руководство по созданию приложения flask и обнаружил ошибку, когда попытался добавить пользователя Ad Admin. Я попытался воссоздать приложение basi c и попытаться сузить проблему, создав только модель администратора и попытавшись добавить в нее данные, и он показывает мне ту же ошибку.

My APP

from flask import Flask
from flask_sqlalchemy import SQLAlchemy

app = Flask(__name__)

app.config['SECRET_KEY'] = 'secret'
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///test.db'

db = SQLAlchemy(app)

class Admin(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(20), nullable=False)
    password = db.Column(db.String(20), nullable=False)


    def __repr__(self):
        return f"Admin('{self.username}', '{self.password}')"


@app.route('/')
def hello_world():
    admin = Admin(username='Justas', password='test')
    db.session.add(admin)
    db.session.commit()                              # Error at here
    return 'Hello, World!'

if __name__ == '__main__':
    app.run(debug=True)    

Ошибка

это отображается в терминале, когда я пытаюсь запустить его python app.py

Traceback (most recent call last):
  File "C:\Users\Sarunas\Desktop\test APP\my_app\env\Lib\site-packages\sqlalchemy\engine\base.py", line 1283, in _execute_context
    self.dialect.do_execute(
  File "C:\Users\Sarunas\Desktop\test APP\my_app\env\Lib\site-packages\sqlalchemy\engine\default.py", line 590, in do_execute
    cursor.execute(statement, parameters)
sqlite3.IntegrityError: UNIQUE constraint failed: admin.username

The above exception was the direct cause of the following exception:

...

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

1 Ответ

0 голосов
/ 17 июня 2020

Сообщения об ошибках указывают на то, что вы пытаетесь создать администратора, который уже существует. Вы можете избежать этого, добавив проверку перед созданием нового администратора;

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

Пожалуйста, проверьте это с помощью приведенного выше кода.

...