mysql懒加载数据_数据查询懒加载技术

本文介绍了在 SQLAlchemy 中如何实现 MySQL 的懒加载技术。通过示例展示了如何在 User 和 Article 模型间建立关系,并利用 lazy='dynamic' 实现查询优化,避免一次性加载所有数据,提高性能。
摘要由CSDN通过智能技术生成

#encoding: utf-8

from sqlalchemy importcreate_engine,Column,Integer,String,Float,func,and_,or_,Text,\

ForeignKey,DateTimefrom sqlalchemy.ext.declarative importdeclarative_basefrom sqlalchemy.orm importsessionmaker,relationship,backreffrom random importrandintfrom datetime importdatetime

HOSTNAME= '127.0.0.1'PORT= 3306DATABASE= 'first_sqlalchemy'USERNAME= 'root'PASSWORD= '123456'

#dialect+driver://username:password@host:port/database

DB_URI = "mysql+pymysql://{username}:{password}@{host}:{port}/"\"{db}?charset=utf8".format(username=USERNAME,password=PASSWORD,host=HOSTNAME,port=PORT,db=DATABASE)

engine=create_engine(DB_URI)

Base=declarative_base(engine)#Session = sessionmaker(engine)#session = Session()

session= sessionmaker(engine)() #Session(**local_kw)

classUser(Base):__tablename__ = 'user'id= Column(Integer,primary_key=True,autoincrement=True)

username= Column(String(32),nullable=False)#articles = relationship("Article") #获取用户发布所有文章

classArticle(Base):__tablename__ = 'article'id= Column(Integer,primary_key=True,autoincrement=True)

title= Column(String(50),nullable=False)

content= Column(Text,nullable=False)

uid= Column(Integer,ForeignKey('user.id',ondelete='RESTRICT'),nullable=False)#没有加载懒加载技术的relationship

#author = relationship('User',backref='articles')

#注意是user表对article表的懒加载,写在多关系一边

author = relationship('User',backref=backref('article',lazy=

'dynamic'))def __repr__(self):return ''%self.title

s#Base.metadata.drop_all()#

#Base.metadata.create_all()#

#user = User(username='zhiliao')#

#for x in range(100):#article = Article(title='title%s'%x,content='content%s'%x)#article.author = user#session.add(article)#session.commit()#获取该用户的所有文章#user = session.query(User).first()#

#print(user.articles)

#如果获取该用户今天发表的文章#articles = user.articles#article_today = [article for article in articles if article.create_time.day=='today']#如果想上面那样做的话,很耗费性能,等于我要全部查一遍

#user = session.query(User).first()#print(type(user.articles)) #,这是没有加载lazy

user=session.query(User).first()print(type(user.articles))#加了lazy就变成了AppenderQuery对象#因为AppenderQuery对象,就可以这样写,比如说查询该用户31天发表的文章,大大节省了性能

print(user.articles.filter(Article.create_time.day == 31))#还可以追加数据进去

article = Article(title= 'title100')

user.articles.append(article)

session.commit()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值