首先 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...