當我使用 db.commit.session() 時,我的 Flask 應用程式拋出錯誤,我沒有看到我的代碼中的錯誤位置,這是終端中的代碼和錯誤:
>>> user_1 = User(username='Corey', email='C@demo.com', password='password')
>>> db.session.add(user_1)
>>> user_2 = User(username='JohnDoe', email='jd@demo.com', password='password')
>>> db.session.add(user_2)
>>> db.create_all()
>>> db.session.commit()
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<string>", line 2, in commit
File "C:\Users\hp\miniconda3\lib\site-packages\sqlalchemy\orm\session.py", line 1428, in commit
self._transaction.commit(_to_root=self.future)
File "C:\Users\hp\miniconda3\lib\site-packages\sqlalchemy\orm\session.py", line 827, in commit
self._assert_active(prepared_ok=True)
File "C:\Users\hp\miniconda3\lib\site-packages\sqlalchemy\orm\session.py", line 608, in _assert_active
code="7s2a",
sqlalchemy.exc.PendingRollbackError: This Session's transaction has been rolled back due to a previous exception during flush. To begin a new transaction with this Session, first issue Session.rollback(). Original exception was: (sqlite3.IntegrityError) UNIQUE constraint failed: user.image_file
[SQL: INSERT INTO user (username, email, image_file, password) VALUES (?, ?, ?, ?)]
[parameters: ('JohnDoe', 'jd@demo.com', 'default.jpg', 'password')]
(Background on this error at: https://sqlalche.me/e/14/gkpj) (Background on this error at: https://sqlalche.me/e/14/7s2a)
老實說,我不知道這是我的終端代碼還是我的主代碼,我正在學習一個教程,Corey Schafer,我很確定這與他采取的步驟相同,但我的卻在犯錯誤這是我的代碼我的應用程式
from datetime import datetime
from flask import Flask, render_template, url_for, flash, redirect
from flask_sqlalchemy import SQLAlchemy
from forms import RegistrationForm, LoginForm
app = Flask(__name__)
app.config['SECRET_KEY'] = 'cac78a5498388aa4a95fb2be0f0a6499'
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///site.db'
db = SQLAlchemy(app)
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(20), unique=True, nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False)
image_file = db.Column(db.String(20), unique=True, default='default.jpg')
password = db.Column(db.String(60), nullable=False)
posts = db.relationship('Post', backref="author", lazy=True)
def __repr__(self):
return f"User('{self.username}','{self.email}','{self.image_file}')"
class Post(db.Model):
id = db.Column(db.Integer, primary_key=True)
title = db.Column(db.String(100), nullable=False)
date_posted = db.Column(db.DateTime, nullable=False, default=datetime.utcnow)
content = db.Column(db.Text, nullable=False)
user_id = db.Column(db.Integer, db.ForeignKey('user.id'), nullable=False)
def __repr__(self):
return f"Post('{self.title}','{self.date_posted}')"
請有人幫助我,非常感謝
uj5u.com熱心網友回復:
問題是您image_file在指定時將用戶模型的列定義為“唯一” unique=True。當您創建新用戶(不指定 image_file)時,這會引發錯誤,因為默認image_file值始終為“default.jpg”。基本上,您只需要洗掉列中的unique=True屬性image_file,因為新用戶(默認情況下)將擁有相同的影像檔案。
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/333653.html
標籤:Python 数据库 sqlite 烧瓶 烧瓶-sqlalchemy
上一篇:SQL將一組按比例分配給其他組
