日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【Flask】ORM多对多关联关系

發布時間:2025/3/21 编程问答 27 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Flask】ORM多对多关联关系 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

1.多對多的關系需要通過一張中間表來綁定他們之間的關系。
2. 先把兩個需要做多對多的模型定義出來
3. 使用Table定義一個中間表,中間表一般就是包含兩個模型的外鍵字段就可以了,并且讓他們兩個來作為一個“復合主鍵”。
4. 在兩個需要做多對多的模型中隨便選擇一個模型,定義一個relationship屬性,來綁定三者之間的關系,在使用relationship的時候,需要傳入一個secondary=中間表對象名

數據庫的配置變量、創建數據庫引擎、創建模型類基類、創建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 # 數據庫的配置變量 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)#創建數據庫引擎 engine=create_engine(DB_URI)#創建模型類基類 Base=declarative_base(engine)#創建session對象 session=sessionmaker(engine)()

第一步:定義中間表

第三步:定義中間表的兩個外鍵作為聯合字段

temp_table=Table('t_temp_tab1',Base.metadata,#第三步:定義中間表的兩個外鍵作為聯合字段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)#第四步:定義關聯關系,secondary=中間表的變量名course_list=relationship('Course',backref='student_list',secondary=temp_table)def __str__(self):return f'{self.name}'

第四步:定義關聯關系,secondary=中間表的變量名

特別注意1:course_list=relationship(‘Course’,backref=‘student_list’,secondary=temp_table)的寫法;secondary=中間表的變量名
課程表

class Course(Base):__tablename__='t_course1'id = Column(Integer, primary_key=True, autoincrement=True)c_name = Column(String(30))def __str__(self):return f'{self.c_name}'

插入數據

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

查詢數據

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多对多关联关系的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。