【问题标题】:Showing all tables with SQLAlchemy使用 SQLAlchemy 显示所有表
【发布时间】:2021-11-23 21:20:25
【问题描述】:

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

app.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 %}

【问题讨论】:

  • 无法检索特定列,或者根本无法检索任何数据? db.create_all() 的位置几乎肯定不是你想要的。
  • 根本无法检索任何数据。 db.create_all() 的位置已更正更改,但结果相同。还有其他帮助吗?
  • 是否有 .db 文件?如果有,用sqlite3命令打开,看看能不能手动查询数据。
  • 当然,有.db文件,我可以通过sqlite3工具查询来检索所有数据。你能看出我的代码有问题吗?
  • 另外唯一跳出来的就是sqlite://///Users/...,可能需要sqlite:///Users/...(也就是去掉两个斜线)。

标签: python flask sqlalchemy


【解决方案1】:

导入模型需要在db实例化后说明。试试这个

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

【讨论】:

  • 相信我在“endblock”末尾添加或删除“body”标签不会改变任何内容。
  • 这样的话,我又学到了新东西……
  • 我不确定你是否得到了我的新答案,我编辑了我的旧答案。让我知道它是否有效!
  • 不,我没有得到你的新答案。
猜你喜欢
  • 1970-01-01
  • 2020-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-07
  • 1970-01-01
  • 2011-02-15
  • 1970-01-01
相关资源
最近更新 更多