【Flask】sqlalchemy高级用法(注意join的用法)
生活随笔
收集整理的這篇文章主要介紹了
【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的用法)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Flask】SQLALchemy的介绍
- 下一篇: 关于解决:ModuleNotFoundE