![](/img/trans.png)
[英]python Flask program bump into (INTERNAL SERVER ERROR 500) after working good for six months
[英]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()
您已將username
和email
字段設置為唯一。 第一次訪問/
,會創建兩個用戶。 第二次訪問時,視圖會嘗試再次創建和插入相同的兩個用戶。 但是,數據庫中已經存在用戶名和電子郵件,因此失敗。
創建具有相同值的模型的實例是不一樣的,從數據庫中選擇它。 相反,您應該首先嘗試選擇現有實例,只有在查詢未返回任何內容時才創建新實例。
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.