gpt4 book ai didi

python - 有哪些方法可以播种 Flask 应用程序?

转载 作者:太空宇宙 更新时间:2023-11-04 01:54:16 25 4
gpt4 key购买 nike

我即将在 aws Elastic Beanstalk 上部署一个非常简单的 flask 应用程序。我必须用什么方法来放置一些种子数据,以便实时实例有一些用户?

from dateutil import parser
from datetime import datetime
from flask import Flask, request, jsonify
from flask_sqlalchemy import SQLAlchemy
from flask_marshmallow import Marshmallow
import os

app = Flask(__name__)
basedir = os.path.abspath(os.path.dirname(__file__))

app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///' + os.path.join(basedir, 'db.sqlite')
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
db = SQLAlchemy(app)
ma = Marshmallow(app)


.
.
.

@app.route('/user/<id>', methods=['PUT'])
def update_user(id):
user = User.query.get(id)
weight = request.json['weight']
user.weight = weight
db.session.commit()
return user_schema.jsonify(user)

class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String)
weight = db.Column(db.Float)
workouts = db.relationship('Workout', backref='user', lazy=True)

def __init__(self, name, weight):
self.name = name
self.weight = weight

class UserSchema(ma.Schema):
class Meta:
fields = ('id', 'name', 'weight')

user_schema = UserSchema(strict=True)
users_schema = UserSchema(many=True, strict=True)

.
.
.

db.create_all()

if __name__ == '__main__':
app.run(debug=True)

同样,我希望实时实例具有一些种子数据(我知道我可以使用本地控制台创建一些条目)。我在想我应该把包含种子放在 block 中

if __name__ == '__main__':
user1 = User('Jon',75)
db.session.add(user1)
db.session.commit()

但我不确定这样做的正确方法是什么。这也不会在每次启动应用程序时运行吗?我只需要它第一次运行一次

最佳答案

不久前,我对我的新 Flask 应用程序也有类似的需求,我通过使用 Faker 创建一个函数来解决它库添加一些初始数据,然后使用 Click 中的 cli 命令调用它库,因为我只需要运行一次。我想它也可以为你工作。请注意,两者都是外部库。

这是一个可能适用于您的案例的示例 - 根据需要进行修改:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
import os

import click
import random

from faker import Faker


app = Flask(__name__)
basedir = os.path.abspath(os.path.dirname(__file__))

fake = Faker() #initialize faker service

app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///' + os.path.join(basedir, 'db.sqlite')
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
db = SQLAlchemy(app)

class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String)
weight = db.Column(db.Float)
workouts = db.relationship('Workout', backref='user', lazy=True)

def __init__(self, name, weight):
self.name = name
self.weight = weight
rest of your code...

此函数将由 Cli 命令调用以完成此操作

@click.command()
@click.option('--count', default=20, help='number of users to be generated')
def add_users(count):
"""
Generate fake users.
"""
random_usernames = []
data = []

click.echo('Working...')

# Ensure we get the count number of usernames.

for i in range(0, count):
random_usernames.append(fake.first_name())

random_usernames = list(set(random_usernames))

while True:
if len(random_usernames) == 0:
break

username = random_usernames.pop()
weight = random.uniform(30.5,260.5)

user = User(username, weight)
db.session.add(user)
db.session.commit()


return click.echo('{} users were added successfully to the database.'.format(count))

if __name__ == '__main__':
add_users()

最后,在您的命令行中调用 cli 命令。

$ python app.py --count=50
Working...
50 users were added successfully to the database.

Click along with Faker 非常有帮助,希望它适合你。

关于python - 有哪些方法可以播种 Flask 应用程序?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57244233/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com