Thêm bản ghi vào bảng trong khi chạy db init


8

Tôi đang sử dụng bình, sqlalchemy, sqlite và python cho ứng dụng của mình. Khi tôi chạy db init để tạo cơ sở dữ liệu, tôi muốn một số giá trị mặc định đã được thêm vào cơ sở dữ liệu. Tôi đã thử hai điều này để thêm các hồ sơ vào bảng. Một phương pháp là sử dụng 'sự kiện'.

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

Khi tôi chạy

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

Tôi không nhận được bất kỳ vấn đề nào nhưng hồ sơ không được tạo.

Phương pháp khác mà tôi đã thử là, trong các mô hình, tôi đã đưa vào

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)

Mã mô hình lớp:

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

Khi tôi chạy python Manage_db.py db init, tôi gặp lỗi Student_status, không có bảng nào như vậy.

Ai đó có thể giúp tôi làm thế nào để thêm các giá trị mặc định vào bảng student_status khi tôi chạy db init không?

Tôi cũng đã thử với máy gieo hạt. Tôi đã cài đặt seeder nd, thêm một tập tin mới gọi là seed.py và tôi đã chạy chạy seed seed

Hạt giống của tôi trông như thế này

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)

Tôi đã chạy db init, db di chuyển và nâng cấp db. Tôi không nhận được bất kỳ vấn đề. Khi tôi chạy hạt giống chạy, tôi gặp lỗi này

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

Tôi đã googled nó và tôi đã thử xuất FLASK_APP = seed.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.

Câu trả lời:


1

Trước khi chạy ứng dụng bình, bạn nên khởi tạo FLASK_APP và FLASK_ENV.

Đầu tiên Tạo một chức năng để thêm dữ liệu. giả sử rằng tên hàm được chạy giống như của bạn,

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)

Bây giờ bạn có thể gọi chức năng này trong tập tin chạy ứng dụng. Giả sử rằng tệp của tôi đã được đặt tên là app.py.

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

Bây giờ hãy đặt FLASK_APP và FLASK_ENV như bên dưới.

export FLASK_APP=app.py
export FLASK_ENV=development

Sau đó, bạn có thể chạy các lệnh dưới đây.

flask db init
flask db  migrate
flask db upgrade

điều này sẽ tạo ra tất cả các bảng và dữ liệu những gì bạn muốn.

Để biết thêm chi tiết, bạn có thể nhận được từ liên kết dưới đây. Liên kết này là cho một kho lưu trữ Github. Ở đó tôi đã thực hiện thêm một số dữ liệu khi bắt đầu ứng dụng. Chỉ cần đọc readme.MD sau đó bạn có thể hiểu thêm về việc thiết lập FLASK_APP.

Thêm dữ liệu Flask khi khởi tạo DB


Xin chào Theesh, tôi đã thêm Flask_env và Vase_app và sau đó tôi bắt đầu chạy init và di chuyển. Tôi không nhận được bất kỳ lỗi. Tôi đã thử chạy hạt giống chạy cũng được, tôi không nhận được bất kỳ lỗi nào. Nhưng dữ liệu không được đưa vào cơ sở dữ liệu.
Đạo sư Krishna

Xin chào Ngài Krishna, tôi có thể xem mã của bạn bây giờ không?
Theesh

0

humm, có vẻ như bạn đặt một dấu gạch dưới Student_status, cố gắng loại bỏ nó. Và điều khác, hãy thử viết lớp của bạn trong CamelCase, là cách viết mã "Pythonic" hơn, khi bạn chạy nó, SQLalchemy sẽ tự động chuyển đổi tên lớp này thành bảng student_status


Xin chào Caio Filus, tôi đã thử tất cả những thay đổi mà bạn đã đề cập. Nhưng tôi đang nhận được cùng một lỗi.
Đạo sư Krishna

bạn có thể chỉ cho bạn mã Model?
Caio Filus

Có Mã mô hình của tôi là class studentStatus (db.Model): "Lưu danh sách trạng thái" status_id = db.Column (db.Integer, primary_key = True) status_name = db.Column (db.String) def _ numpr __ (self): return f "studentStatus ('{self.status_id}', '{self.status_name}')"
Đạo sư Krishna
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.