database - 在 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>
解决方案
首先,在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)
推荐阅读
- python-3.x - 在 Amazon Linux 上写入 txt 文件时,Python '\n' 不起作用
- html - 无论屏幕大小如何,使用 CSS 将 flex 元素居中
- angular - 带有 debounceTime 的 Angular HttpClient 请求不等待到期时间
- xaml - 为什么在这种情况下嵌套的 FlexLayout 不可见?
- reactjs - 将 React 组件挂载到客户端
- javascript - 可以修改但不能替换方法的原型?
- spring-boot - Spring Boot - 方法被多次调用
- sql-server - 将 nvarchar(max) 值与列进行比较
- c# - WEB API HTTP 标头
- r - 如何用 R 代码编织 Rmd 文件以生成 word 文档