Hinzufügen von Datensätzen zur Tabelle beim Ausführen von db init

8

Ich verwende Kolben, SQLalchemie, SQLite und Python für meine Anwendung. Wenn ich den db init zum Erstellen der Datenbank ausführe, möchte ich, dass der Datenbank einige Standardwerte hinzugefügt werden. Ich habe diese beiden Dinge versucht, um die Datensätze in die Tabelle aufzunehmen. Eine Methode ist die Verwendung von 'event'.

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()

Wenn ich renne

python manage_db.py db init,
python manage_db.py db migrate,
python manage_db.py db upgrade

Ich habe keine Probleme bekommen, aber die Datensätze werden nicht erstellt.

Die andere Methode, die ich ausprobiert habe, ist die, die ich in die models.py aufgenommen habe

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)

Der Klassenmodellcode:

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}')" 

Wenn ich python manage_db.py db init ausführe, wird der Fehler Student_status angezeigt. Es gibt keine solche Tabelle.

Kann mir jemand helfen, die Standardwerte zur Tabelle student_status hinzuzufügen, wenn ich db init ausführe?

Ich habe es auch mit Flaschensämaschine versucht. Ich habe Flask Seeder installiert und eine neue Datei namens seeds.py hinzugefügt und den Flask Seed Run ausgeführt

Mein seeds.py sieht so aus

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)

Ich habe db init, db migrate und db upgrade ausgeführt. Ich habe keine Probleme bekommen. Wenn ich einen Kolbensamenlauf ausgeführt habe, wird dieser Fehler angezeigt

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

Ich habe es gegoogelt und versucht, FLASK_APP = seeds.py zu exportieren

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.
Guru Krishna
quelle

Antworten:

1

Bevor Sie die Kolbenanwendung ausführen, sollten Sie FLASK_APP und FLASK_ENV instanziieren.

Erstellen Sie zunächst eine Funktion zum Hinzufügen von Daten. Angenommen, der Funktionsname wird wie der Ihre ausgeführt.

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)

Jetzt können Sie diese Funktion in der App-laufenden Datei aufrufen. Angenommen, meine Datei hat den Namen app.py.

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

Stellen Sie nun FLASK_APP und FLASK_ENV wie folgt ein.

export FLASK_APP=app.py
export FLASK_ENV=development

Danach können Sie die folgenden Befehle ausführen.

flask db init
flask db  migrate
flask db upgrade

Dadurch werden alle gewünschten Tabellen und Daten erstellt.

Weitere Informationen erhalten Sie unter dem folgenden Link. Dieser Link ist für ein Github-Repository. Dort habe ich beim Starten der App einige Daten hinzugefügt. Lesen Sie einfach die readme.MD, dann erhalten Sie weitere Informationen zum Einrichten von FLASK_APP.

Flask Data Hinzufügen beim Instanziieren der DB

Theesh
quelle
Hallo Theesh, ich habe Flask_env und flask_app hinzugefügt und starte dann Init und Migration. Ich erhalte keine Fehlermeldung. Ich habe auch versucht, den Kolbensamenlauf auszuführen. Jetzt wird kein Fehler angezeigt. Es werden jedoch keine Daten in die Datenbank eingefügt.
Guru Krishna
Hallo Guru Krishna, kann ich deinen Code jetzt sehen?
Theesh
0

Humm, scheint, als würdest du einen Unterstrich einfügen, Student_statusversuche ihn zu entfernen. Wenn Sie versuchen, Ihre Klasse in CamelCase zu schreiben, können Sie einen Code eher "pythonisch" schreiben. Wenn Sie ihn ausführen, wandelt die SQLalchemy diesen Klassennamen automatisch in die Tabelle student_status um

Caio Filus
quelle
Hallo Caio Filus, ich habe alle von Ihnen erwähnten Änderungen ausprobiert. Aber ich bekomme den gleichen Fehler.
Guru Krishna
Können Sie Ihnen den Modellcode zeigen?
Caio Filus
Ja Mein Modellcode lautet class studentStatus (db.Model): "Speichern Sie die Statusliste" 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}')"
Guru Krishna