Flask 資料庫高階多對多關係

2021-07-11 16:09:18 字數 1920 閱讀 9942

之前介紹了多對多關係:

在之前介紹的多對多關係中,關聯表就是乙個簡單的表,不是模型,sqlalchemy 會自動接管這個表。多對多關係可以分解成原表和關聯表之間的兩個一對多關係。這個表裡面儲存了原表的兩個主鍵作為自己的聯合主鍵。

存在的問題:因為在這種關聯表裡操作的時候都是物件導向的,新增,刪除等操作都是直接找到這個物件(具體見上篇)。如果需要新增第三個欄位來區分這些記錄的先後關係,沒辦法新增進去的,關聯表完全是sqlalchemy掌握的內部表。所以,採用了新的多對多關係模型的設計。

為了能在關係中處理自定義的資料, 我們必須提公升關聯表的地位,使其變成程式可訪問的模型。下面是新的關聯表設計。設計背景為上節所述學生與學院多對多關係。

class user(usermixin, db.model): __tablename__ = 'users' id = db.column(db.integer, primary_key=true).............................................. department = db.relationship('user_department', foreign_keys=[user_department.user_id], backref=db.backref('user', lazy='joined'), lazy='dynamic', cascade='all, delete-orphan')

class department(db.model):

__tablename__ = 'departments'

id = db.column(db.integer, primary_key=true)

department = db.column(db.string(100))

department2 = db.column(db.string(100))

user = db.relationship('user_department',

foreign_keys=[user_department.departmentr_id],

backref=db.backref('department', lazy='joined'),

lazy='dynamic',

cascade='all, delete-orphan')

class user_department(db.model): __tablename__ = 'users_deparments' user_id = db.column(db.integer, db.foreignkey('users.id'), primary_key=true) departmentr_id = db.column(db.integer, db.foreignkey('departments.id'), primary_key=true) is_changed = db.column(db.boolean, default=false)

下面介紹一下新增刪除的實現:

p_department=department.query.get(form.pre_department.data)

p_de=user_department(user=user, department=p_department, is_changed=true)

db.session.add(p_de)

deparments=user.department.filter_by(user_id=user.id).all()

for de in deparments:

db.session.delete(de)

Flask 多對多關係

1.專案結構 對錶的基本操作可見鏈結 3.多對多關係 以下通過文章,作者,文章 標記 三個表示例操作 from flask import flask from flask sqlalchemy import sqlalchemy import config create table article ...

flask 定義資料庫關係(多對多)

多對多 我們使用學生和老師來演示多對多關係 每個學生有多個老師,每個老師有多個學生。多對多關係示意圖如下 在例項程式中,student類表示學生,teacher類表示老師。在這兩個模型之間建立多對多關係後,我們需要在student類中新增乙個集合關係屬性teachers,呼叫它可以獲取某個學生的多個...

ORACLE 資料庫設計 多對多關係

關於資料庫兩張表多對多的關係設計,之前以為多對多關係,只要兩張表存在各自對方表的主鍵就行。殊不知這種理解是錯誤的,今天藉此時間總結一下。資料庫多對多表設計,假設使用主外來鍵關係設計多對多表關係,會造成 1 對一張表進行dml語句時,該錶對應的外來鍵會影響另外一張表的資料,產生級聯刪除問題 2 因為是...