Estou usando o balão, sqlalchemy, sqlite e python para o meu aplicativo. Quando executo o db init para criar o banco de dados, quero que um conjunto padrão de valores seja adicionado ao banco de dados. Eu tentei essas duas coisas para adicionar os registros à tabela. Um método está usando 'evento'.
from sqlalchemy.event import listen
from sqlalchemy import event, DDL
@event.listens_for(studentStatus.__table__, 'after_create')
def insert_initial_values(*args, **kwargs):
db.session.add(studentStatus(status_name='Waiting on admission'))
db.session.add(studentStatus(status_name='Waiting on student'))
db.session.add(studentStatus(status_name='Interaction Initiated'))
db.session.commit()
Quando eu corro
python manage_db.py db init,
python manage_db.py db migrate,
python manage_db.py db upgrade
Não recebi nenhum problema, mas os registros não estão sendo criados.
O outro método que tentei é, nos models.py, que incluí
record_for_student_status = studentStatus(status_name="Waiting on student")
db.session.add(record_for_student_status)
db.session.commit()
print(record_for_student_status)
O código do modelo de classe:
class StudentStatus(db.Model):
status_id = db.Column(db.Integer,primary_key=True)
status_name = db.Column(db.String)
def __repr__(self):
return f"studentStatus('{self.status_id}','{self.status_name}')"
Quando executo python manage_db.py db init, estou recebendo um erro Student_status, não existe essa tabela.
Alguém pode me ajudar como adicionar os valores padrão à tabela student_status quando executo o db init?
Eu tentei com o semeador de frascos também. Eu instalei o semeador de balões e adicionei um novo arquivo chamado seeds.py e executei a corrida de sementes do balão
Meu seeds.py fica assim
class studentStatus(db.Model):
def __init__(self, status_id=None, status_name=None):
self.status_id = db.Column(db.Integer,primary_key=True)
self.status_name = db.Column(db.String,status_name)
def __str__(self):
return "ID=%d, Name=%s" % (self.status_id, self.status_name)
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=studentStatus,
init={
"status_id": 1,
"name": "Waiting on Admission"
}
)
# Create 5 users
for user in faker.create(5):
print("Adding user: %s" % user)
self.db.session.add(user)
Corri db init, db migrate e db upgrade. Eu não tive nenhum problema. Quando executei o teste de semente do balão, estou recebendo este erro
Error: Could not locate a Flask application. You did not provide the "FLASK_APP" environment variable, and a "wsgi.py" or "app.py" module was not found in the current directory
Pesquisei no Google e tentei exportar FLASK_APP = seeds.py
Then I ran the flask seed run ,I am getting an error ``` error could not import seeds.py```
Please help me in this.
What I need finally is when I do db initialization for the first time some default value have to be added to the database.
fonte
humm, parece que você colocou um sublinhado
Student_status
, tente removê-lo. E outra coisa, tente escrever sua classe no CamelCase, é uma maneira mais "Pythonic" de escrever um código; quando você o executa, o SQLalchemy transformará esse nome de classe na tabela student_status automaticamentefonte