flaskデータベースの多対多モデルの練習

5072 ワード

多対多演習
プロジェクト開発では、次のような多くのデータ間の多対多の関係に遭遇します.
  • 学生ネット選択授業(学生と課程)
  • 先生とその授業のクラス(先生とクラス)
  • ユーザーとそのコレクションのニュース(ユーザーとニュース)
  • など...

  • したがって,開発中にORMモデルを用いてテーブルとテーブルの多対多関連関係をコードで記述する必要がある.マルチペアマルチリレーションシップ記述には、2つのテーブル間の対応関係を記録するために個別のテーブルを追加する必要があるという唯一の点があります.
    シーンの例
    需要分析
  • 学生はネットで授業を選ぶことができて、学生は複数があって、課程も複数の
  • があります
  • 学生:張三、李四、王五
  • コースには、物理、化学、生物
  • があります.
  • 選択関係:
  • 枚の3つの選択は化学と生物の
  • を修理しました
  • 李四は化学
  • を選択した.
  • 王五は物理、化学、生物
  • を選択した.
  • 需要:
  • 学生が選択したカリキュラムを問い合わせる
  • ある課程のすべてどれらの学生が
  • を選ぶことがあることを検索します

    構想分析
  • は分析によって
  • すべての学生データを1枚のテーブルで保存する
  • すべてのカリキュラムデータを1枚のテーブルで保存する
  • 具体表及びテストデータは以下の通りである:
  • 学生表(Student)
    プライマリキー(id)
    学生名(name)
    1
    張三
    2
    李四
    3
    王五
    選択科目表(Course)
    プライマリキー(id)
    カリキュラム名(name)
    1
    物理的
    2
    化学
    3
    せいぶつ
    データ関連関係テーブル(Student_Course)
    プライマリ・キー(student.id)
    プライマリ・キー(course.id)
    1
    2
    1
    3
    2
    2
    3
    1
    3
    2
    3
    3
    結果
  • ある学生がどの課程を選択したかを照会します.例えば、王五がどの課程を選択したかを照会します.
  • 王五のidを取り出してStudio_Courseテーブルでstudentをクエリーします.id値3のすべてのデータ
  • は3つのデータを検索し、この3つのデータのcourseを検索します.id値を取りCourseテーブルを問い合わせると結果
  • が得られる.
  • どのコースにどのような学生が選択しているかを問い合せます.たとえば、生物コースにどのような学生が選択しているかを問い合せます.
  • 生物学の授業のidを取り出してStudentに行きますCourseテーブルでcourseを問い合わせる.id値3のすべてのデータ
  • は2つのデータを検索し、この2つのデータの中のstudentを検索します.id値を取り、Studioテーブルに問い合わせると結果
  • が得られる.

    コードトレーニング
  • 定義モデルおよび表
  • tb_student_course = db.Table('tb_student_course',
                                 db.Column('student_id', db.Integer, db.ForeignKey('students.id')),
                                 db.Column('course_id', db.Integer, db.ForeignKey('courses.id'))
                                 )
    
    
    class Student(db.Model):
        __tablename__ = "students"
        id = db.Column(db.Integer, primary_key=True)
        name = db.Column(db.String(64), unique=True)
    
        courses = db.relationship('Course', secondary=tb_student_course,
                                  backref='student',
                                  lazy='dynamic')
    
    
    class Course(db.Model):
        __tablename__ = "courses"
        id = db.Column(db.Integer, primary_key=True)
        name = db.Column(db.String(64), unique=True)
    
  • 試験データ
  • を追加
    if __name__ == '__main__':
        db.drop_all()
        db.create_all()
    
        #       
    
        stu1 = Student(name='  ')
        stu2 = Student(name='  ')
        stu3 = Student(name='  ')
    
        cou1 = Course(name='  ')
        cou2 = Course(name='  ')
        cou3 = Course(name='  ')
    
        stu1.courses = [cou2, cou3]
        stu2.courses = [cou2]
        stu3.courses = [cou1, cou2, cou3]
    
        db.session.add_all([stu1, stu2, stu2])
        db.session.add_all([cou1, cou2, cou3])
    
        db.session.commit()
    
        app.run(debug=True)