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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

【Flask】ORM的关联关系

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

1、表的外鍵關聯

使用SQLAlchemy創建外鍵非常簡單。在從表中增加一個字段,指定這個字段外鍵的是哪個表的哪個字段就可以了。從表中外鍵的字段,必須和主表的主鍵字段類型保持一致。

特別注意1:這種關聯只關注數據表之間的外鍵關聯,不考慮Python對象之間的關聯關系.

前提需要連接數據庫、創建數據庫引擎、創建基類、創建session

from sqlalchemy import create_engine, Column, Integer, ForeignKey, String, TEXT, Boolean, DATE, DECIMAL from sqlalchemy.ext.declarative import declarative_base from datetime import date from sqlalchemy.orm import sessionmaker # 數據庫的配置變量 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 Base=declarative_base(engine)#創建session session=sessionmaker(engine)() #注意sessionmaker 返回一個函數

創建主表模型類:

class Dept(Base):__tablename__='t_dept'dept_no=Column(name='dept_no',type_=Integer,primary_key=True,autoincrement=True)dept_name=Column(name='dept_name',type_=String(50),unique=True)city=Column(name='city',type_=String(50))def __str__(self):return f'{self.dept_no}-{self.dept_name}-{self.city}'

創建從表模型類:

class Emp(Base):__tablename__='t_emp'emp_no=Column(name='emp_no',type_=Integer,primary_key=True,autoincrement=True)emp_name=Column(name='emp_name',type_=String(50))job=Column(name='job',type_=String(50))hire_date=Column(name='hire_date',type_=DATE)sal=Column(name='sal',type_=DECIMAL(10,2))dept_no=Column(ForeignKey(t_dept.dept_no,ondelete='CASCADE'),name='dept_no',type_=Integer)def __str__(self):return f'{self.emp_no}{self.emp_name}{self.job}{self.hire_date}{self.sal}'

特別注意:設置外鍵關聯,在從表中增加一個字段,指定這個字段外鍵的是哪個表的哪個字段就可以了。從表中外鍵的字段,必須和主表的主鍵字段類型保持一致

dept_no=Column(ForeignKey(t_dept.dept_no,ondelete='CASCADE'),name='dept_no',type_=Integer)

根據模型類生成數據表

#根據模型類建表 Base.metadata.create_all() #刪除表 #Base.metadata.drop_all()

插入數據

#插入數據 d1=Dept(dept_name='信息部',city='北京') session.add(d1) session.commit()e1=Emp(emp_name='kobe',job='銷售',hire_date='2020-12-12',sal='8888.888',dept_no=1) session.add(e1) session.commit()

2、外鍵的刪除選項

  • RESTRICT:若子表中有父表對應的關聯數據,刪除父表對應數據,會阻止刪除。默認項
  • NO ACTION:在MySQL中,同RESTRICT。
  • CASCADE:級聯刪除。刪除主表數據時,連通一起刪除外鍵表的數據
  • SET NULL:父表對應數據被刪除,子表對應數據項會設置為NULL。
  • 舉例:CASCADE

    主表

    從表

    刪除主表中dept_no為1的員工信息

    d1=session.query(Dept).filter(Dept.dept_no==1).first() session.delete(d1) session.commit()

    執行完上述代碼后,從表中的關聯數據一起刪除

    總結

    以上是生活随笔為你收集整理的【Flask】ORM的关联关系的全部內容,希望文章能夠幫你解決所遇到的問題。

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