本文将分享如何在Django中使用单个查询集选择记录并更新它?的详细内容,并且还将对django或查询进行详尽解释,此外,我们还将为大家带来关于django如何找到两个查询集(querySet)的并集
本文将分享如何在 Django 中使用单个查询集选择记录并更新它?的详细内容,并且还将对django或查询进行详尽解释,此外,我们还将为大家带来关于django 如何找到两个查询集(querySet)的并集?、Django 查询集使用注释获得单个 id 的最大分数、sql – 使用django如何将来自不同模型的两个查询组合成一个查询?、sql – 使用单个查询更新多个表列值的相关知识,希望对你有所帮助。
本文目录一览:- 如何在 Django 中使用单个查询集选择记录并更新它?(django或查询)
- django 如何找到两个查询集(querySet)的并集?
- Django 查询集使用注释获得单个 id 的最大分数
- sql – 使用django如何将来自不同模型的两个查询组合成一个查询?
- sql – 使用单个查询更新多个表列值
如何在 Django 中使用单个查询集选择记录并更新它?(django或查询)
如何在相同的情况下运行update
andselect
语句,queryset
而不必执行两个查询: - 一个选择对象 - 一个更新对象
SQL 中的等价物类似于:
update my_table set field_1 = ''some value'' where pk_field = some_value
答案1
小编典典使用查询集对象update
方法:
MyModel.objects.filter(pk=some_value).update(field1=''some value'')
django 如何找到两个查询集(querySet)的并集?
我有一个带有两个自定义管理器方法的Django模型。 每个对象都会根据对象的不同属性返回模型对象的不同子集。
有没有什么方法可以获取一个查询集,或者只是一个对象列表,那就是每个管理器方法返回的查询集的并集?
解决代码如下:
records = query1 | query2
如果不想拥有重复数据,这就需要增加一个方法:distinct()
records = (query1 | query2).distinct()
django版本在1.11以后支持union方法
q = query1.union(query2) # q将包含query1 + query2的所有唯一记录 q = query1.union(query2, all=True) # q将包含query1 + query2的所有记录(包括重复数据) q = query1.union(query2,query3) # 多个集合求并集
Django 查询集使用注释获得单个 id 的最大分数
如何解决Django 查询集使用注释获得单个 id 的最大分数?
我有一个名为坐的以下模型
Class Sitting(models.Model):
user = models.ForeignKey(settings.AUTH_USER_MODEL,verbose_name=_("User"),on_delete=models.CASCADE)
quiz = models.ForeignKey(Quiz,verbose_name=_("Quiz"),on_delete=models.CASCADE)
current_score = models.IntegerField(verbose_name=_("Current score"))
complete = models.BooleanField(default=False,blank=False,verbose_name=_("Complete"))
end = models.DateTimeField(null=True,blank=True,verbose_name=_("End"))
class Question(models.Model):
quiz = models.ManyToManyField(Quiz,blank=True)
category = models.ForeignKey(Category,verbose_name=_("Category"),null=True,on_delete=models.CASCADE)
questionmarks = models.PositiveIntegerField(
blank=True,verbose_name=_("Question Marks"),help_text=_("Marks of each question. Beginner-1,Intermediate-2,Advanced-3,Expert-4"))
我正在尝试创建一个排行榜,其中在特定时期内显示该周/月的所有 10 个排行榜。
要确定百分比分数,我使用以下方法。
def get_max_score(self):
questionmarks= Question.objects.filter(id__in=self._question_ids()).aggregate(Sum(''questionmarks''))
#return len(self._question_ids())
print(questionmarks)
return questionmarks[''questionmarks__sum'']
def get_percent_correct(self):
dividend = float(self.current_score)
divisor = self.get_max_score
if divisor < 1:
return 0 # prevent divide by zero error
if dividend > divisor:
return 100
correct = float((dividend / divisor) * 100)
if correct >= 1:
return correct
else:
return 0
我想获得所有测验中得分最高的前 10 名用户。我尝试使用下面的代码,但无法使用查询集确定得分百分比。
sitting = Sitting.objects.filter(complete=True).annotate(total=Count(''id'')).values(''user__username'',''current_score'').order_by(''user__username'')[:10]
感谢任何帮助。
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)
sql – 使用django如何将来自不同模型的两个查询组合成一个查询?
我们忽略细节,只是说第一种是一个名为Msg1的模型,另一个叫做Msg2
这两个模型的领域是完全不同的,两个模型共有的唯一字段是“日期”和“标题”(当然,id).
我可以得到Msg1.objects.all()和Msg2.objects.all(),但我可以将这两个查询组合成一个查询,按日期排序,并分页?
我需要保留查询的懒惰性质.
简单的解决方案是列出(查询)两个查询并将它们组合在一个python列表中.但由于明显的原因,这是无效率的.
我在模型和dp-api上查看了django引用,但似乎没有办法将不同模型/表的查询组合成一个.
解决方法
创建一个包含日期和标题的基本模型.子类Msg1和Msg2如下所述.使用基本模型进行所有查询(填写页面),然后在最后一刻切换到派生类型.
关于继承的真正伟大的事情是,django然后允许你使用来自其他模型的外键的基本模型,所以你可以使你的整个应用程序更加灵活.在引擎盖下,它只是一个基础模型的表,每个子模型的表包含一对一的键.
sql – 使用单个查询更新多个表列值
MySQL示例
MySQL中的等效代码:
UPDATE party p LEFT JOIN party_name n ON p.party_id = n.party_id LEFT JOIN party_details d ON p.party_id = d.party_id LEFT JOIN incident_participant ip ON ip.party_id = p.party_id LEFT JOIN incident i ON ip.incident_id = i.incident_id SET p.employee_id = NULL,c.em_address = 'x@x.org',c.ad_postal = 'x',n.first_name = 'x',n.last_name = 'x' WHERE i.confidential_dt IS NOT NULL
使用Oracle 11g会有什么相同的声明?
谢谢!
RTFM
使用Oracle时似乎单个查询不足:
http://download-west.oracle.com/docs/cd/B10501_01/server.920/a96540/statements_108a.htm#2067717
解决方法
/** XXX CODING HORROR... */
根据您的需要,您可以使用可更新的视图.您可以创建基表的视图,并为此视图添加“代替”触发器,并直接更新视图.
一些示例表:
create table party ( party_id integer,employee_id integer ); create table party_name ( party_id integer,first_name varchar2(120 char),last_name varchar2(120 char) ); insert into party values (1,1000); insert into party values (2,2000); insert into party values (3,3000); insert into party_name values (1,'Kipper','Family'); insert into party_name values (2,'Biff','Family'); insert into party_name values (3,'Chip','Family'); commit; select * from party_v; PARTY_ID EMPLOYEE_ID FirsT_NAME LAST_NAME 1 1000 Kipper Family 2 2000 Biff Family 3 3000 Chip Family
…然后创建一个可更新的视图
create or replace view party_v as select p.party_id,p.employee_id,n.first_name,n.last_name from party p left join party_name n on p.party_id = n.party_id; create or replace trigger trg_party_update instead of update on party_v for each row declare begin -- update party set party_id = :new.party_id,employee_id = :new.employee_id where party_id = :old.party_id; -- update party_name set party_id = :new.party_id,first_name = :new.first_name,last_name = :new.last_name where party_id = :old.party_id; -- end; /
您现在可以直接更新视图…
update party_v set employee_id = 42,last_name = 'Oxford' where party_id = 1; select * from party_v; PARTY_ID EMPLOYEE_ID FirsT_NAME LAST_NAME 1 42 Kipper Oxford 2 2000 Biff Family 3 3000 Chip Family
今天关于如何在 Django 中使用单个查询集选择记录并更新它?和django或查询的介绍到此结束,谢谢您的阅读,有关django 如何找到两个查询集(querySet)的并集?、Django 查询集使用注释获得单个 id 的最大分数、sql – 使用django如何将来自不同模型的两个查询组合成一个查询?、sql – 使用单个查询更新多个表列值等更多相关知识的信息可以在本站进行查询。
本文标签: