Python全棧Web(Flask框架、多表關聯)
關係對映:
一對多
語法:
1.”多”實體中
外來鍵列名=db.Column(db.Integer,db.ForeignKey(`主表.主鍵`))
2.”一”實體中
增加反向引用關係
屬性名=db.relationship(`多表實體類名`,關係選項)
常用的關係選項:
選項名 說明
backref 在關係的另一個模型中新增反向引用
lazy 指定如何載入相關記錄
select : 首次訪問時載入
immediate : 源物件載入後立馬載入關聯資料
subquery : 立即載入,但使用子查詢
noload : 永不載入
dynamic : 不載入記錄,但提供載入記錄的查詢
uselist 如果設定為False,則不使用列表,使用標量
secondary 指定多對多關係中關聯表的名字
class Course(db.Model):
__tablename__ = "course"
id = db.Column(db.Integer,primary_key=True)
cname = db.Column(db.String(30))
#反向引用:返回與當前課程相關的teacher列表
#backref:定義反向關係,本質上會向Teacher實體中增加一個course屬性.
# 該屬性可替代course_id來訪問Course模型.此時獲得到的是模型物件,而不是外來鍵值
teachers=db.relationship(`Teacher`,backref=`course`,lazy=`dynamic`)
def __init__(self,cname):
self.cname = cname
def __repr__(self):
return "<Course %r>" % self.cname
class Teacher(db.Model):
__tablename__=`teacher`
id = db.Column(db.Integer,primary_key=True)
tname = db.Column(db.String(30))
tage = db.Column(db.Integer)
# 增加一列 : course_id,外來鍵列,要引用自主鍵表(course)的主鍵列(id)
course_id = db.Column(db.Integer,db.ForeignKey(`course.id`))
def __init__(self,tname,tage):
self.tname = tname
self.tage = tage
def __repr__(self):
return "<Teacher %r>" % self.tname
一對一
A表中的一條記錄只能與B表中的一條記錄相關聯
B表中的一條記錄只能與A表中的一條記錄相關聯
class Teacher(db.Model):
__tablename__=`teacher`
id = db.Column(db.Integer,primary_key=True)
tname = db.Column(db.String(30))
tage = db.Column(db.Integer)
#增加反向引用,與 Wife 實體類做一對一引用.允許在Teacher中得
# 到一個Wife的資訊.同時,在Wife中也能的到一個Teacher的資訊
# uselist=False , 查詢出來的是一個物件,而不是一個列表
wife = db.relationship(`Wife`,backref=`teacher`,uselist=False)
def __init__(self,tname,tage):
self.tname = tname
self.tage = tage
def __repr__(self):
return "<Teacher %r>" % self.tname
class Wife(db.Model):
__tablename__ = `wife`
id = db.Column(db.Integer,primary_key=True)
wname = db.Column(db.String(30))
wage = db.Column(db.Integer)
#增加一個列:表示引用自teacher表的主鍵
teacher_id = db.Column(db.Integer,db.ForeignKey(`teacher.id`))
def __init__(self,wname,wage):
self.wage = wage
self.wname = wname
def __repr__(self):
return "<Wife %r>" % self.wname
多對多
A表中的一條資料可以與B表中的任意多條資料相關聯
B表中的一條資料可以與A表中的任意多條資料相關聯
多對多的實現:
使用第三張表來關聯(並不需要實體類)
建立第三張表
student_course = db.Table(
“student_course”, # 在資料庫中的表名
db.Column(“id”, db.Integer, primary_key=True),
db.Column(“student_id”, db.Integer, db.ForeignKey(“student.id”)),
db.Column(“course_id”, db.Integer, db.ForeignKey(“course.id”))
)
student_course = db.Table(
`student_course`,
db.Column(`id`,db.Integer,primary_key=True),
db.Column(`student_id`,db.Integer,db.ForeignKey(`student.id`)),
db.Column(`couse_id`,db.Integer,db.ForeignKey(`course.id`))
)
相關文章
- Python全棧Web(Django框架、模板)Python全棧WebDjango框架
- Python全棧Web(Django框架、模型中的CRUD)Python全棧WebDjango框架模型
- Python全棧Web(Ajax概述建立)Python全棧Web
- 快速上手python的簡單web框架flaskPythonWeb框架Flask
- Python全棧Web(HTML標籤大全)Python全棧WebHTML
- LOVEPHP-WEB全棧開源框架釋出PHPWeb全棧框架
- 固執己見的全棧web框架 — Redwood全棧Web框架
- Python全棧工程師之從網頁搭建入門到Flask全棧專案實戰(5) - Flask中的ORM使用Python全棧工程師網頁FlaskORM
- Python全棧Web(JavaScript函式、陣列)Python全棧WebJavaScript函式陣列
- Python全棧Web(定位佈局、定位方式)Python全棧Web
- Python全棧工程師之從網頁搭建入門到Flask全棧專案實戰(6) - Flask表單的實現Python全棧工程師網頁Flask
- Flask之旅: 寫一個簡單的Python Web框架FlaskPythonWeb框架
- python的flask框架PythonFlask框架
- JPA多表關聯查詢
- python全棧Python全棧
- Python Flask Web教程001:Flask簡介PythonFlaskWeb
- Python全棧Web(AjaxJQuery-AJAX跨域請求)Python全棧WebjQuery跨域
- 輕量級Web框架Flask(二)Web框架Flask
- Python之Flask框架一PythonFlask框架
- ORACLE多表關聯UPDATE語句Oracle
- MySQL關聯多表更新的操作MySql
- 多表關聯更新(mysql,oracle,postgreSQL)MySqlOracle
- 全棧 – 21 Web基礎 網頁的關節JS全棧Web網頁JS
- MyBatisPlus怎麼多表關聯查詢?MyBatis
- mysql中的多表關聯查詢MySql
- 如何做多表關聯查詢
- MySQL為什麼不要多表關聯?MySql
- 如何才能成為一名Python web全棧工程師?PythonWeb全棧工程師
- 後端渲染:基於Deno的全新全棧Web框架Fresh介紹後端全棧Web框架
- Python全棧工程師之從網頁搭建入門到Flask全棧專案實戰(7) - 線上問答系統Python全棧工程師網頁Flask
- Python flask-restful框架講解PythonFlaskREST框架
- Oracle\MS SQL Server Update多表關聯更新OracleSQLServer
- sql 多表關聯刪除表資料SQL
- onethinkphp 如何做多表關聯查詢PHP
- Web全棧開發有前途嗎?Web全棧
- 前端全棧必會node框架koa。。。前端全棧框架
- 如何使用 Flask 編寫 Python Web APIFlaskPythonWebAPI
- python Flask框架學習——Response響應PythonFlask框架