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テーブルに問い合わせると結果 が得られる.
コードトレーニング定義モデルおよび表 試験データ を追加
プロジェクト開発では、次のような多くのデータ間の多対多の関係に遭遇します.
したがって,開発中にORMモデルを用いてテーブルとテーブルの多対多関連関係をコードで記述する必要がある.マルチペアマルチリレーションシップ記述には、2つのテーブル間の対応関係を記録するために個別のテーブルを追加する必要があるという唯一の点があります.
シーンの例
需要分析
構想分析
プライマリキー(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
結果
コードトレーニング
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)