一个命令参数轻松初始化 Flask 应用数据库

写在前面

在部署应用程序时,一个常见的任务是在首次运行之前创建数据库和表。有许多方法可以实现这一点,但一种简洁的方法是将其作为应用程序的一部分。让我们看看如何借助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

(0)
小半的头像小半

相关推荐

发表回复

登录后才能评论
极客之音——专业性很强的中文编程技术网站,欢迎收藏到浏览器,订阅我们!