【Flask】ORM的关联关系
生活随笔
收集整理的這篇文章主要介紹了
【Flask】ORM的关联关系
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
1、表的外鍵關(guān)聯(lián)
使用SQLAlchemy創(chuàng)建外鍵非常簡單。在從表中增加一個字段,指定這個字段外鍵的是哪個表的哪個字段就可以了。從表中外鍵的字段,必須和主表的主鍵字段類型保持一致。
特別注意1:這種關(guān)聯(lián)只關(guān)注數(shù)據(jù)表之間的外鍵關(guān)聯(lián),不考慮Python對象之間的關(guān)聯(lián)關(guān)系.
前提需要連接數(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.ext.declarative import declarative_base from datetime import date from sqlalchemy.orm import sessionmaker # 數(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 Base=declarative_base(engine)#創(chuàng)建session session=sessionmaker(engine)() #注意sessionmaker 返回一個函數(shù)創(chuàng)建主表模型類:
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}'創(chuàng)建從表模型類:
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}'特別注意:設(shè)置外鍵關(guān)聯(lián),在從表中增加一個字段,指定這個字段外鍵的是哪個表的哪個字段就可以了。從表中外鍵的字段,必須和主表的主鍵字段類型保持一致。
dept_no=Column(ForeignKey(t_dept.dept_no,ondelete='CASCADE'),name='dept_no',type_=Integer)根據(jù)模型類生成數(shù)據(jù)表
#根據(jù)模型類建表 Base.metadata.create_all() #刪除表 #Base.metadata.drop_all()插入數(shù)據(jù)
#插入數(shù)據(jù) 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、外鍵的刪除選項
舉例:CASCADE
主表
從表
刪除主表中dept_no為1的員工信息
執(zhí)行完上述代碼后,從表中的關(guān)聯(lián)數(shù)據(jù)一起刪除
總結(jié)
以上是生活随笔為你收集整理的【Flask】ORM的关联关系的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Flask】flask上下文
- 下一篇: 【Flask】创建一个蓝图