处理与选择相关的预取,半自动

django-aggressivequer的Python项目详细描述


(这是实验包)

处理与选择相关的预取,半自动创建。

fromdjango_aggressivequeryimportfrom_queryset(from_queryset(UserInfo.objects.filter(point__gt=0),["user__teams__games"]).prefetch_filter(user__teams__games=lambdaqs:qs.filter(name__contains="-a")))# almost same meansfromdjango.db.modelsimportPrefetch(UserInfo.objects.filter(point__gt=0).select_related("user").prefetch_related("user__teams",Prefetch("user__teams__games",queryset=Game.objects.filter(name__contains="-a"))))

SQL示例

SELECT"userinfo"."id","userinfo"."point","userinfo"."ctime","userinfo"."user_id","user"."id","user"."name","user"."ctime"FROM"userinfo"INNERJOIN"user"ON("userinfo"."user_id"="user"."id")WHERE"userinfo"."point">0;SELECT("team_users"."user_id")AS"_prefetch_related_val_user_id","team"."id","team"."name","team"."price","team"."ctime"FROM"team"INNERJOIN"team_users"ON("team"."id"="team_users"."team_id")WHERE"team_users"."user_id"IN(2);SELECT"game"."id","game"."team_id","game"."name","game"."price","game"."ctime"FROM"game"WHERE("game"."name"LIKE'%-a%'ESCAPE'\'AND"game"."team_id"IN(1,2));

型号

# relation: UserInfo - User *-* Team -* GameclassUser(models.Model):name=models.CharField(max_length=255,default="",null=False)ctime=models.DateTimeField()classUserInfo(models.Model):point=models.IntegerField(null=False,default=0)user=models.OneToOneField(User,related_name="info")ctime=models.DateTimeField()classTeam(models.Model):users=models.ManyToManyField(User,related_name="teams")name=models.CharField(max_length=255,default="",null=False)price=models.IntegerField(null=False,default=0)ctime=models.DateTimeField()classGame(models.Model):team=models.ForeignKey(Team,related_name="games")name=models.CharField(max_length=255,default="",null=False)price=models.IntegerField(null=False,default=0)ctime=models.DateTimeField()

更具体的选项

使用更多特定的选项从@queryset()调用,然后使用query.only()

fromdjango_aggressivequeryimportfrom_queryset(from_queryset(UserInfo.objects.filter(point__gt=0),["point","user__name","user__teams__name","user__teams__games__name"],more_specific=True).prefetch_filter(user__teams__games=lambdaqs:qs.filter(name__contains="-a")))

0.3.1:

  • 在发现意外关系时修复错误。

0.3.0条: -修复出现重复提示的错误 -修复未使用方法的错误 -正在添加扩展功能。 -作为扩展重新实现 -实现自定义预取()作为扩展 -作为扩展重新实现预取过滤器 -(模块分离)

0.2.0条: -跳过函数支持(aggressivequery.skip_filter()

0.1.2条: -温和的类型检查,在from_query()

0.1.1条 -删除无需连接(预取时已释放)

0.1分 -首次发布

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java JPA、MySQL和GlassFish crud错误   java简单JSON服务器   java如何在JSplitPane中添加JTable?   Java日期模式   java从arraylist创建重复记录   java我应该如何在现有父对象的一对多注释映射中执行更新操作?   java发现双链表中的最小元素无效   java如何打印一组数字以及从1到列表中每个数字的平方和?   多线程线程在java上被锁定。util。堆栈   在Java中解析文本文件时出现问题   尝试使用Maven构建时java缺少工件   数组在Excel、Selenium和Java中迭代行   java Spark 1.6与Kryo 2.21和ArrayList