我是Flask的新手,正在尝试将用户添加到我的数据库中。一切工作正常,但是(也许,也许不是)升级数据库时,我现在收到以下错误消息
sqlalchemy.exc.InvalidRequestError: 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.OperationalError) no such table: users
有人知道我可以从这里做什么吗?
这是我的模型。py:
from server import db
from sqlalchemy.dialects.postgresql import JSON
from datetime import datetime
class User(db.Model):
__tablename__ = 'users'
__table_args__ = {'extend_existing': True}
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(64), unique=True, index=True)
email = db.Column(db.String(64), unique=True, index=True)
我的server.py
from flask import Flask, request, abort, jsonify, redirect, url_for, flash, render_template,
session, g
from flask_sqlalchemy import SQLAlchemy
import os
#from models import db
app = Flask(__name__)
#app.config.from_object(os.environ['APP_SETTINGS'])
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)
@app.route("/")
def hello():
return "Welcome!!!"
我的manage.py
import os
from flask_script import Manager
from flask_migrate import Migrate, MigrateCommand
from server import app, db
#app.config.from_object(os.environ['APP_SETTINGS'])
migrate = Migrate(app, db)
manager = Manager(app)
manager.add_command('db', MigrateCommand)
if __name__ == '__main__':
manager.run()
我在顶部有一个config.py文件,但我认为它与这里无关。
例如,当我在终端中输入“ python manage.py shell”并且执行类似操作
from models import User, db
db.create_all()
user_susan = User(username='susan', email='susan@hotmail.com')
db.session.add(user_susan)
db.session()
这是错误消息填充的时间,它在...之前没有出现过,将不胜感激。
答案 0 :(得分:0)
如错误消息所述:您的数据库上一次提交存在错误(例如:用户已存在导致“唯一约束失败”。
SqlAlchemy建议处理失败的提交:
try:
<use session>
session.commit()
except:
session.rollback()
raise <-- you can inspect your root error, if you log/print this exception
finally:
session.close() # optional, depends on use case
答案 1 :(得分:0)
检查您之前捕获了来自 sqlalchemy.exc
的哪些异常。较新版本的 sqlalchemy 可能会抛出与早期版本不同的命名异常。
我最近不得不从捕捉 sqlalchemy.exc.DatabaseError
切换到捕捉 sqlalchemy.exc.InvalidRequestError
。