首页 > 解决方案 > 在 Flask Web 服务器上显示 Python 数据库

问题描述

我正在做一个项目,该项目需要我创建一个数据库,将数据导入其中,并将其显示在 FLASK 本地服务器上。我已经创建了数据库,但我很困惑我需要做什么才能在服务器上显示它的表。我将它设置为通过 render_template 通过 HTML 显示信息,并相信我已经通过 config.py 建立了连接,但我不确定从这里去哪里。我已阅读以下指南,但我不太了解它们。如果有人可以提供帮助,我将不胜感激。

http://flask.pocoo.org/docs/0.12/patterns/sqlalchemy/ http://flask-sqlalchemy.pocoo.org/2.3/config/

以下是项目根目录中的相关文件。

/project
    config.py
    database_insert.py
    server.py
    /app
        /templates
            index.html
        __init__.py
        models.py
        routes.py

配置文件

import os
basedir = os.path.abspath(os.path.dirname(__file__))

class Config(object):
    SECRET_KEY = 'you-will-never-guess'
    app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////project/app.db'
    SQLALCHEMY_TRACK_MODIFICATIONS = False

初始化.py

from flask import Flask, request, render_template
from config import Config
from flask_sqlalchemy import SQLAlchemy
from flask_migrate import Migrate

app = Flask(__name__)
app.config.from_object(Config)
db = SQLAlchemy(app)
migrate = Migrate(app, db)

from app import routes, models

模型.py

from app import db

class Lot(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    title = db.Column(db.String(64), index=True)
    spots = db.relationship('Spot', backref='author', lazy='dynamic')

    def __repr__(self):
        return '<Lot {}>'.format(self.username)  

class Spot(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    availability = db.Column(db.String(140))
    spot_num = db.Column(db.String(140))
    lot_id = db.Column(db.Integer, db.ForeignKey('lot.id'))

    def __repr__(self):
        return '<Spot {}>'.format(self.body)

路线.py

from app import app
from flask import Flask, request, render_template

@app.route('/')
@app.route('/index')
def index():
    lot_details = {
        'id': 'TEST_ID', #placeholder for testing purposes
        'title': 'TEST_TITLE' #placeholder for testing purposes
    }
    return render_template('index.html', lot=lot_details)

索引.html

<!DOCTYPE html>
<html>
    <head>
        <title>test</title>
    </head>
    <body>
        <p>Hello, World!</p>
        <p>{{lot.id}}</p>
        <p>{{lot.title}}</p>
    </body>

标签: databasesqliteflasksqlalchemyflask-sqlalchemy

解决方案


首先,在Spot模型类中定义辅助方法。

class Spot(db.Model):
    id = db.Column(db.Integer, primary_key=True)
    availability = db.Column(db.String(140))
    spot_num = db.Column(db.String(140))
    lot_id = db.Column(db.Integer, db.ForeignKey('lot.id'))

    def __repr__(self):
        return '<Spot {}>'.format(self.body)

    def dump(self):
        return dict(id=self.id, title=self.title)

然后,在您的烧瓶路线中,您可以查询:

@app.route('/')
@app.route('/index')
def index():
    lot_details = Lot.query.first().dump() # query first item
    return render_template('index.html', lot=lot_details)

推荐阅读