Flask SqlAlchemy:未显示记录

时间:2016-01-30 05:53:39

标签: python sqlite flask-sqlalchemy

这是我的代码:

from flask import Flask
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from database_setup import Base, Restaurant, MenuItem

app = Flask(__name__)

engine = create_engine('sqlite:///restaurantmenu.db')
Base.metadata.bind = engine

DBSession = sessionmaker(bind=engine)
session = DBSession()


@app.route('/')
@app.route('/restaurants/<int:restaurant_id>/')
def restaurantMenu(restaurant_id):
    restaurant = session.query(Restaurant).filter_by(id=restaurant_id).one()
    items = session.query(MenuItem).filter_by(restaurant_id=restaurant.id)
    output = ''
    for i in items:
        output += i.name
        output += '</br>'
        output += i.price
        output += '</br>'
        output += i.description
        output += '</br>'
        output += '</br>'
    return output

if __name__ == '__main__':
    app.debug = True
    app.run(host='0.0.0.0', port=5000)

我输入以下网址运行该文件:

localhost:5000/restaurants/2

我得到的只是一个空白页面。我的GitBash或浏览器或其他任何地方都没有出现任何错误。

我运行了这个简单的代码:

from flask import Flask
app = Flask(__name__)


@app.route('/')
@app.route('/hello')
def HelloWorld():
    return "Hello World"

if __name__ == '__main__':
    app.debug = True
    app.run(host='0.0.0.0', port=5000)

这完美运行。我做错了什么?

编辑:1

尝试调试代码并注意到代码没有进入for i in items:循环。

@app.route('/')
@app.route('/hello')
def restaurantMenu():
    restaurant = session.query(Restaurant).first()
    items = session.query(MenuItem).filter_by(restaurant_id = restaurant.id)
    output = ''
    print restaurant.name
    print restaurant.id

    if not items :
        print "No menu items!"
    else:
        print "There are menu items!"
        for i in items:
            print "In items loop!"
            output += i.name
            output += '<br>'
    return output + "Hello"

enter image description here

1 个答案:

答案 0 :(得分:1)

基本上,您需要namespace __is_class_imp { template <class _Tp> char __test(int _Tp::*); template <class _Tp> __two __test(...); } template <class _Tp> struct _LIBCPP_TYPE_VIS_ONLY is_class : public integral_constant<bool, sizeof(__is_class_imp::__test<_Tp>(0)) == 1 && !is_union<_Tp>::value> {}; 处的all()功能。您正在查询但是您没有获取结果。

所以你的代码就像这样

items

现在它将取决于你的数据库中的条目,如果你有,否则它将返回一个空的@app.route('/') @app.route('/restaurants/<int:restaurant_id>/') def restaurantMenu(restaurant_id): restaurant = session.query(Restaurant).filter_by(id=restaurant_id).one() items = session.query(MenuItem).filter_by(restaurant_id=restaurant.id).all() output = '' for i in items: output += i.name output += '</br>' output += i.price output += '</br>' output += i.description output += '</br>' output += '</br>' return output if __name__ == '__main__': app.debug = True app.run(host='0.0.0.0', port=5000) 。因此,如果您有结果,则可以打印并检查或循环并将其呈现给模板。

这应该可以解决您的问题