簡體   English   中英

啟動flask python后內部服務器錯誤500

[英]Internal server error 500 after launching flask python

我正在關注教程: https : //pythonhosted.org/Flask-SQLAlchemy/quickstart.html但我缺少一些東西。 我使用 Pycharm 4.0.6 作為解釋器。 幾乎一切正常,但是當我添加 db.session.commit() 它說我:內部服務器錯誤 500

服務器遇到內部錯誤,無法完成您的請求。 服務器過載或應用程序中存在錯誤。

from flask import Flask
from flask.ext.sqlalchemy import SQLAlchemy
app = Flask(__name__)

app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////tmp/test.db'
db = SQLAlchemy(app)

class User(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String(80), unique=True)
    email = db.Column(db.String(120), unique=True)

    def __init__(self, username, email):
        self.username = username
        self.email = email
    def __repr__(self):
        return '<User %r>' % self.username

@app.route('/')
def hello_world():
    db.create_all()
    admin = User('admin', 'admin@example.com')
    guest = User('guest', 'guest@example.com')
    db.session.add(admin)
    db.session.add(guest)
    db.session.commit()
    return 'Hello World'



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

您已將usernameemail字段設置為唯一。 第一次訪問/ ,會創建兩個用戶。 第二次訪問時,視圖會嘗試再次創建和插入相同的兩個用戶。 但是,數據庫中已經存在用戶名和電子郵件,因此失敗。

創建具有相同值的模型的實例是不一樣的,從數據庫中選擇它。 相反,您應該首先嘗試選擇現有實例,只有在查詢未返回任何內容時才創建新實例。

admin = User.query.filter(
    User.username == 'admin' | User.email == 'admin@example.com'
).first()

if admin is None:
    admin = User('admin', 'admin@example.com')
    db.session.add(admin)
    db.session.commit()

如需更深入的了解,請參閱 SQLAlchemy wiki 中的獨特配方

最好設置“app.debug = True”以獲取可以幫助您進行故障排除的錯誤消息,我相信@davidism 已經擊敗了我的答案,但只是補充一下,您應該按如下方式捕獲 SQlAlchemy 錯誤:

from sqlalchemy.exc import SQLAlchemyError

try:
    db.session.commit()
except SQLAlchemyError as e:
     reason=str(e)
     flash(reason)

這樣您的應用程序將繼續運行,錯誤消息將在屏幕上閃爍,使您和最終用戶更容易糾正錯誤。

就我而言,我使用的是模板文件夾外的 index.html 模板。 當我移動模板文件夾下的 index.html 文件時,問題得到了解決。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM