使用SQLAlchemy查询数据库图书表无法获取指定字段问题求助
问题排查与修复方案
1. 前端模板语法错误
你在bookshelves.html中输出分类的行写错了变量名:
<li class="list-group-item">Category: {{ books.category }}</li>
这里用了全局的列表变量books,而不是循环内的单本图书变量book,自然无法正确取值,改为:
<li class="list-group-item">Category: {{ book.category }}</li>
2. 重复初始化实例导致模型未绑定
你在addBook.py和app.py两个文件里分别初始化了独立的Flask应用和SQLAlchemy实例,Books模型是绑定在addBook.py的db实例上的,app.py里的db实例根本没有注册这个模型,所以查询会出现异常。
修复方案
删掉addBook.py里的Flask应用和SQLAlchemy初始化代码,改成从app.py导入db:
修改后的addBook.py:
from app import db class Books(db.Model): id = db.Column('book_id', db.Integer, primary_key=True) bookname = db.Column(db.String(50)) author = db.Column(db.String(80)) publisher = db.Column(db.String(80)) category = db.Column(db.String()) pagenumber = db.Column(db.Integer()) status = db.Column(db.String()) def __init__(self, bookname, author, publisher, category, pagenumber, status): self.bookname = bookname self.author = author self.publisher = publisher self.category = category self.pagenumber = pagenumber self.status = status
同时调整app.py的导入顺序,避免循环导入,补充数据库操作需要的应用上下文,修正缩进错误:
修改后的app.py:
from flask import Flask, render_template, redirect, url_for, request, flash from flask_sqlalchemy import SQLAlchemy app = Flask(__name__) app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite://///Users/myUser//flaskProject/flasktestdb.db' app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False db = SQLAlchemy(app) # 初始化db之后再导入Books模型 from addBook import Books @app.route("/bookshelves") def bookshelves(): books = Books.query.all() return render_template("bookshelves.html", books=books) if __name__ == '__main__': # 添加上下文,适配新版本Flask-SQLAlchemy要求 with app.app_context(): db.create_all() app.run()
内容的提问来源于stack exchange,提问作者learis
相关产品推荐
相关产品推荐

