Каков наилучший способ заполнения таблицы в SQLAlchemy?

#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
 

для заполнения базы данных.