首页 > 解决方案 > 使用 SQLAlchemy 显示所有表

问题描述

我正在尝试使用 SQLAlchemy 从数据库中检索所有表数据。我写了我的代码,对我来说似乎没问题,但我无法检索所需的列:书名、作者、出版商等列。可能我在我的代码上犯了一个错误,但找不到它。请寻求您的帮助。

应用程序.py

from flask import Flask, render_template, redirect, url_for, request, flash
from flask_sqlalchemy import SQLAlchemy
from addBook import Books

app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite://///Users/myUser//flaskProject/flasktestdb.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)


@app.route("/bookshelves")
def bookshelves():
    books = Books.query.all()
     return render_template("bookshelves.html", books=books)

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

addBook.py(书籍类)

from flask import Flask
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)


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

书架.html

{% extends "layout.html" %}
{% block title %}Book Shelves{% endblock %}
{% block body %}
    <h3>Book Shelves</h3>
    <hr>
    <div class="card-columns">
        {% for book in books %}
            <div class="card" style="width: 18rem;">
                <div class="card-body">
                    <h5 class="card-title">{{ book.bookname }}</h5>
                    <h6 class="card-subtitle mb-2 text-muted">{{ book.author }}</h6>
                </div>
                <ul class="list-group list-group-flush">
                    <li class="list-group-item">Publisher: {{ book.publisher }}</li>
                    <li class="list-group-item">Category: {{ books.category }}</li>
                    <li class="list-group-item">Page Number: {{ book.pagenumber }}</li>
                    <li class="list-group-item">Status: {{ book.status }}</li>
                </ul>
                <div class="card-body">
                    <a href="#" class="card-link">Edit Book</a>
                    <a href="#" class="card-link">Delete Book</a>
                </div>
            </div>
        {% endfor %}
    </div>
{% endblock body %}

标签: pythonflasksqlalchemy

解决方案


The import model needs to be stated after the db instantiation. Try this

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)

from addBook import Books

推荐阅读