写在前面
在部署应用程序时,一个常见的任务是在首次运行之前创建数据库和表。有许多方法可以实现这一点,但一种简洁的方法是将其作为应用程序的一部分。让我们看看如何借助click
库来实现这一点。click
库可以用于在脚本中创建和扩展命令行选项。
为了简单起见,我们将使用SQLite
数据库,它可以创建一个本地文件数据库。
创建 models.py 文件
首先,我们需要创建models.py
文件,这个文件包含了一个类,代表了名为 employees 的表及其模式。
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
class EmployeeModel(db.Model):
__tablename__ = 'employees'
id = db.Column(db.Integer, primary_key=True)
employee_id = db.Column(db.Integer(),unique=True)
name = db.Column(db.String())
age = db.Column(db.Integer())
position = db.Column(db.String(80))
def __init__(self,employee_id,name,age,position):
self.employee_id = employee_id
self.name = name
self.age = age
self.position = position
def __repr__(self):
return f"{self.name}:{self.employee_id}"
创建main.py文件
现在我们将创建main.py
文件,它将作为我们的Flask
入口文件。我们可以注意到以下两个导入语句,它们是为了使Flask能够接受命令行参数,用于初始化数据库。
from flask.cli import with_appcontext
import click
以下代码片段创建了一个命令行参数,名为init-db
,当使用flask命令给出该参数时,将初始化数据库。
@click.command(name='init-db')
@with_appcontext
def init_db_command():
db.create_all()
click.echo('Initialized the database.')
# Register the CLI command
app.cli.add_command(init_db_command)
以下是完整的脚本:
from flask import Flask
from models import db
from flask.cli import with_appcontext
import click
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///database.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db.init_app(app)
@click.command(name='init-db')
@with_appcontext
def init_db_command():
db.create_all()
click.echo('Initialized the database.')
# Register the CLI command
app.cli.add_command(init_db_command)
if __name__ == '__main__':
app.run(host='0.0.0.0', port=5001)
测试和运行
在首次运行之前初始化数据库,请执行以下步骤:
export FLASK_APP=main.py
flask init-db
Initialized the database.
检查./instance
目录,可以看到数据库文件已创建。
ls -l ./instance
total 24
-rw-r--r-- 1 kpatronas staff 12288 Jan 19 21:35 database.db
运行 Flask 应用程序,请执行以下步骤:
flask run
写在最后
希望这篇简短的文章能够帮助到你,我认为在脚本内部初始化数据库比使用外部 shell 脚本方便,而且在模式更改时不需要维护外部脚本。
原文始发于微信公众号(harvey的网络日志):一个命令参数轻松初始化 Flask 应用数据库
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
文章由极客之音整理,本文链接:https://www.bmabk.com/index.php/post/206341.html