diddi- / flask-seeder

Flask extension for seeding database
32 stars 11 forks source link

flask seed run #18

Closed eugenioroblessiller closed 11 months ago

eugenioroblessiller commented 11 months ago

Hello I have my models and seeders in their files but when I try tu run flask seed run I get this message

Running database seeders Committing to database!

Here is the example of how I am arranging the files

app.py

from dotenv import load_dotenv from flask import Flask from flask_migrate import Migrate from flask_restful import Api

from db import database from ma import marshmallow from models import from sd import seeder from seeder import

app = Flask(name)

load_dotenv(".env")

app.config.from_object("default_config")

app.config.from_envvar("APPLICATION_SETTINGS")

database.init_app(app) marshmallow.init_app(app) seeder.init_app(app, database) migrate = Migrate(app, database) api = Api(app)

if name == "main": app.run(port=5000, debug=True)

model (models folder)

from datetime import datetime

from db import database as db

class Account(db.Model):

__tablename__ = "accounts"

id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(80), nullable=False)
type = db.Column(db.String(80), nullable=False)
balance = db.Column(db.Float, nullable=False)
currency = db.Column(db.String(80), nullable=False)

user_id = db.Column(db.Integer, db.ForeignKey('users.id'), nullable=False)
user = db.relationship('User', backref='accounts', lazy=True)

# One-to-many relationship with Transaction
transactions = db.relationship('Transaction', backref='account', lazy=True)

created_at = db.Column(db.DateTime, nullable=False,
                       default=datetime.utcnow)
updated_at = db.Column(
    db.DateTime, default=datetime.utcnow, onupdate=datetime.utcnow)

seeder ( in seeder folder)

from datetime import datetime

from flask_seeder import Faker, Seeder, generator

from db import database as db from models import Account, User

class AccountSeeder(Seeder): def run(self): self.priority = 5

Create a Faker generator with Mexican pesos locale

    faker = Faker(locale='es_MX')

    # Get all users from the database
    users = User.query.all()

    # Seed data for the accounts
    for _ in range(10):
        account = Account(
            name=faker.name(),
            type=faker.word(),
            balance=faker.pyfloat(
                min_value=0, max_value=10000, right_digits=2),
            currency='MXN'  # Use 'MXN' for Mexican pesos
        )
        # Assign a random user_id to the account
        account.user_id = generator.random_element(users).id
        db.session.add(account)

    # Tell the Flask-Seeder extension to run this seeder
    self.add_entity(Account)

    db.session.commit()
eugenioroblessiller commented 11 months ago

Fix it, the name of the directory is important