【Flask】ORM多对多关联关系
生活随笔
收集整理的這篇文章主要介紹了
【Flask】ORM多对多关联关系
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
1.多對多的關系需要通過一張中間表來綁定他們之間的關系。
2. 先把兩個需要做多對多的模型定義出來
3. 使用Table定義一個中間表,中間表一般就是包含兩個模型的外鍵字段就可以了,并且讓他們兩個來作為一個“復合主鍵”。
4. 在兩個需要做多對多的模型中隨便選擇一個模型,定義一個relationship屬性,來綁定三者之間的關系,在使用relationship的時候,需要傳入一個secondary=中間表對象名
數(shù)據(jù)庫的配置變量、創(chuàng)建數(shù)據(jù)庫引擎、創(chuàng)建模型類基類、創(chuàng)建session對象
from sqlalchemy import create_engine, Column, Integer, ForeignKey, String, TEXT, Boolean, DATE, DECIMAL from sqlalchemy import Table from sqlalchemy.ext.declarative import declarative_base from datetime import date from sqlalchemy.orm import sessionmaker,relationship,backref # 數(shù)據(jù)庫的配置變量 HOSTNAME = '127.0.0.1' PORT = '3306' DATABASE = 'test' USERNAME = 'root' PASSWORD = 'root' DB_URI = 'mysql+pymysql://{}:{}@{}:{}/{}?charset=utf8mb4'.format(USERNAME, PASSWORD, HOSTNAME, PORT, DATABASE)#創(chuàng)建數(shù)據(jù)庫引擎 engine=create_engine(DB_URI)#創(chuàng)建模型類基類 Base=declarative_base(engine)#創(chuàng)建session對象 session=sessionmaker(engine)()第一步:定義中間表
第三步:定義中間表的兩個外鍵作為聯(lián)合字段
temp_table=Table('t_temp_tab1',Base.metadata,#第三步:定義中間表的兩個外鍵作為聯(lián)合字段Column("s_id",Integer,ForeignKey('t_student1.id'),primary_key=True),Column("c_id",Integer,ForeignKey('t_course1.id'),primary_key=True) )第二步:定義多對多的兩個模型對象
學生表
class Student(Base):__tablename__='t_student1'id=Column(Integer,primary_key=True,autoincrement=True)name=Column(String(30))age=Column(Integer)#第四步:定義關聯(lián)關系,secondary=中間表的變量名course_list=relationship('Course',backref='student_list',secondary=temp_table)def __str__(self):return f'{self.name}'第四步:定義關聯(lián)關系,secondary=中間表的變量名
特別注意1:course_list=relationship(‘Course’,backref=‘student_list’,secondary=temp_table)的寫法;secondary=中間表的變量名
課程表
插入數(shù)據(jù)
def save():s1=Student(name='kobe',age=25)s2=Student(name='zilv',age=18)s3=Student(name='yyds',age=20)c1=Course(c_name='python')c2=Course(c_name='英語')c3=Course(c_name='語文')s1.course_list.append(c1)s1.course_list.append(c2)s1.course_list.append(c3)s2.course_list.append(c1)s2.course_list.append(c2)s2.course_list.append(c3)s3.course_list.append(c1)s3.course_list.append(c2)s3.course_list.append(c3)session.add(s1)session.add(s2)session.add(s3)session.commit()查詢數(shù)據(jù)
def query():#查詢kobe學生選了那些課stu1=session.query(Student).filter(Student.name=='kobe').first()print(stu1) #查詢kobe學生print(stu1.course_list) #查詢kobe學生學了那些課#查詢python課程都別那些學生選了cou1=session.query(Course).filter(Course.c_name=='python').first()print(cou1) #查詢python課程print(cou1.student_list) #查詢python課程被那些同學選擇了 kobe [<__main__.Course object at 0x00000244E4F03820>, <__main__.Course object at 0x00000244E4F03790>, <__main__.Course object at 0x00000244E4F038E0>] python [<__main__.Student object at 0x00000244E46DC430>, <__main__.Student object at 0x00000244E4F11BE0>, <__main__.Student object at 0x00000244E4F11B50>]總結
以上是生活随笔為你收集整理的【Flask】ORM多对多关联关系的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Flask】RESTful的响应处理
- 下一篇: 【Flask】Request和Reque