flask前後端分離碰到的一些坑

2021-09-12 10:48:39 字數 3751 閱讀 9689

首先 flask多對多關係

多對多關係,中間表使用table,定義乙個用於關係的輔助表,不對中間表直接操作,網上基本上都說強烈建議 不 使用模型, 採用乙個實際的表。我也就這樣用了,

course_class_relation=db.table(

"course_class_relation",

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

db.column('course_id', db.integer, db.foreignkey('course.id',ondelete="cascade")),

db.column('class_id', db.integer, db.foreignkey('classes.id',ondelete="cascade"))

) # 中間關係表

class course(db.model):

__tablename__ = 'course'

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

name = db.column(db.string(40),nullable=true) # 課程名字

teacher_id = db.column(db.integer,db.foreignkey("teacher.id")) # 授課教師id

course_room = db.column(db.string(200),nullable=true) # 上課教室

乙個課程表,乙個班級表,我只是用課程表比較多,就直接把關係放在課程表裡了,正向和反向一樣,只是更習慣正向罷了,backref=db.backref('course',lazy='dynamic') course就是你可以反向呼叫了,對於course來說只需要.classes_relation就可以了

下面來說關係表的關聯查詢和關係表的增刪查改了

首先關聯的話因為course_class_relation是乙個關係表,而不是乙個模型,所以在**裡不能使用module.query.filter()這種來查詢,你需要關聯乙個其他表,課程和班級又是多對多的關係,現在舉例乙個已知乙個教師的id來查他所有的班級,課程表是直接跟老師關聯的,班級表跟中間表關聯

classes = classes.query.join(course_class_relation, classes.id == course_class_relation.c.class_id). \

join(course, course_class_relation.c.course_id == course.id).filter(course.teacher_id == 教師id).all()

對於中間表的增刪查改,比如你現在增加了一門課程,想要在關係表中增加一條資料

course = course.query.filter(course.name == course.name, course.teacher_id == course.teacher_id).first()#你已經增加的課程

cls = classes.query.get(class_id) #根據班級id來獲取班級的這一條資料

db.session.add(cls) #注意add的是cls

db.session.commit() #提交

這個是增加、下面是刪除

classes = classes.query.get(classes.id)         #根據班級id來獲取班級的這一條資料

course.classes_relation.remove(classes) #course是已經知道是這門課程了,然後remove

db.session.commit() #提交

應為中間表為乙個實際表,所以不能直接查詢,我這裡也是取巧了,直接嵌入原生sql進行查詢、因為我還有乙個表跟中間表的id關聯,需要獲取中間表的id,沒辦法,也搜了很多,還是沒有找到可以直接解決的辦法,你有更好的辦法麼,如果有,可以告訴我麼

test = pymysql.connect("127.0.0.1", "使用者", "密碼", "資料庫名稱")

# 使用 cursor() 方法建立乙個游標物件 cursor

cursor = test.cursor()

sql = "select * from course_class_relation where class_id = %s and course_id = %s" % (class_id["id"], course.id)

# 查詢到班級課程關係的id

cursor.execute(sql)

data = cursor.fetchone()

# print(data[0])

classroom_attenance.course_class_id = data[0]

classroom_attenance.bssid = bssid

# 寫入資料庫

db.session.add(classroom_attenance)

db.session.commit()

這就是我引入的原生sql語句、cursor.execute(sql)這句話是獲取它的id

中間表的坑也就踩了這麼多,不著急,坑要乙個乙個的踩,乙個乙個的解決才好玩

還有一些坑,比如說,flask裡面函式不能重名、路由不能重名、在module裡面轉化為字典的時候看看有沒有直接.id.name的,這個不行的,再跳一層,跳到另外的module裡面,獲取外來鍵id的資訊。其他的等碰到更多的再說吧!一時間也想不出來更多了,希望能解決你目前所遇到的問題

前後端分離的一些想法

本文主題應該是前後端分離,我上面的建議是個徹底方案,要革以前系統的命,對存量系統那該如何處理,答案還是重構 想方設法逐步減少已經發現的前後端耦合度高的問題,這個跟我之前的建議就是小重構和大重構的區別,如果有人覺得我上面建議合適,前端組應該馬上提供一套這樣的框架出來,這樣後面的新系統就不會在迴圈前面的...

前後端分離的一些問題

restful架構是目前比較流行的一種網際網路軟體架構,在此架構之下的瀏覽器前端和手機端能共用後端介面。但是涉及到js跨域呼叫介面總是很頭疼,下邊就跟著chrome的報錯資訊一起來解決一下。假設 前端網域名稱為front.ls la.me,後端網域名稱為api.ls la.com。前端需要訪問的介面...

nginx前後端分離遇到的一些坑

公司最近在重構專案,使用nginx做前端伺服器,負載均衡,限速等等,遇到了一些坑,記錄下來.前端頁面伺服器 server 讓nginx攔截80埠,然後直接去nginx根目錄下的html wanmor cloud platform frontend wanmor cloud platform fron...