日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【Flask】sqlalchemy高级用法(注意join的用法)

發布時間:2025/3/21 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【Flask】sqlalchemy高级用法(注意join的用法) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

外鍵以及relationship

首先創建模型類,根據模型類創建數據庫,在這里一個user對應多個email_address,因此需要在address上增加一個user_id這個外鍵(一對多關系)

class User(Base):__tablename__='t_user'id = Column(Integer, primary_key=True)name = Column(String(32))address=relationship('Address',backup=backup('user'),order_by="Address.id")def __repr__(self):return f'{self.id}{self.name}'class Address(Base):__tablename__='t_address'id = Column(Integer, primary_key=True)email_address = Column(String(32), nullable=False)#外鍵字段user_id=Column(Integer,ForeignKey('user.id')) def __repr__(self):return f'{self.id}{self.email_address}'Base.metadata.create_all() #Base.metadata.drop_all()

插入數據:

def save():#插入User表數據res=User(name='kobe3')session.add(res)session.commit()#插入Address表數據res1=Address(email_address='北京',user_id=1)res2=Address(email_address='北京',user_id=2)res3=Address(email_address='濟南',user_id=3)res4=Address(email_address='長沙',user_id=4)session.add_all([res1,res2,res3,res4])session.commit()

查詢數據:

使用join方法:查詢用戶id為4的姓名和地址(不在一張表),需要關聯起來

res=session.query(User).join(Address).filter(User.id==Address.user_id).filter(User.id==4).first() print(res)

不使用join方法:

res=session.query(User.name,Address.email_address).filter(User.id==Address.user_id).first().name print(res)

當不存在外鍵時,使用下面的方法進行讀取數據

res2=session.query.join(Address,User.id==Address.user_id).filter(Address.user_id==1).first() print(res2)

子查詢

查詢地址和id=1相同的人物信息

res3=session.query(Address.email_address.label('city')).filter(Address.id==1).subquery() print(res3) res4=session.query(Address).filter(Address.email_address==res3.c.city).all() print(res4)

統計每個用戶的email地址的數量,

聯接子句,注意子句中需要使用c來調用字段內容

先寫子查詢

res6=session.query(Address.user_id,func.count('*').label('address_count')).group_by(Address.user_id).subquery()

再寫父查詢

res7=session.query(User.name,res6.c.address_count).outerjoin(res6,User.id==res6.c.user_id).all() print(res7)

包含contains

res5=session.query(Address).filter(Address.email_address.contains('長')).all() print(res5) 《新程序員》:云原生和全面數字化實踐50位技術專家共同創作,文字、視頻、音頻交互閱讀

總結

以上是生活随笔為你收集整理的【Flask】sqlalchemy高级用法(注意join的用法)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。