#python #flask #sqlalchemy
#python #flask #sqlalchemy
Вопрос:
Я пытаюсь создать список возможных ролей пользователя веб-приложения. Если я определю roles
таблицу таким образом:
roles = db.Table(
"roles",
db.Model.metadata,
db.Column("role_id", db.Integer, db.ForeignKey("task.id"), primary_key=True),
db.Column("name", db.String(32)),
)
Каков наилучший способ ее заполнения, если я намерен сделать это только один раз (при создании базы данных), а затем никогда не добавлять в нее больше строк?
Ответ №1:
Я полагаю, что эта парадигма называется «заполнение базы данных», это может помочь вам, когда вы ищете ответы в Google.
Я посмотрел онлайн и нашел это: https://pypi.org/project/Flask-Seeder /
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_seeder import FlaskSeeder
def create_app():
app = Flask(__name__)
db = SQLAlchemy()
db.init_app(app)
seeder = FlaskSeeder()
seeder.init_app(app, db)
return app
Затем вы можете создать другой файл с вашими начальными данными.
from flask_seeder import Seeder, Faker, generator
# SQLAlchemy database model
class User(Base):
def __init__(self, id_num=None, name=None, age=None):
self.id_num = id_num
self.name = name
self.age = age
def __str__(self):
return "ID=%d, Name=%s, Age=%d" % (self.id_num, self.name, self.age)
# All seeders inherit from Seeder
class DemoSeeder(Seeder):
# run() will be called by Flask-Seeder
def run(self):
# Create a new Faker and tell it how to create User objects
faker = Faker(
cls=User,
init={
"id_num": generator.Sequence(),
"name": generator.Name(),
"age": generator.Integer(start=20, end=100)
}
)
# Create 5 users
for user in faker.create(5):
print("Adding user: %s" % user)
self.db.session.add(user)
И, наконец, вы можете вызвать
$ flask seed run
для заполнения базы данных.