GVKun编程网logo

如何在 Django 中使用单个查询集选择记录并更新它?(django或查询)

13

本文将分享如何在Django中使用单个查询集选择记录并更新它?的详细内容,并且还将对django或查询进行详尽解释,此外,我们还将为大家带来关于django如何找到两个查询集(querySet)的并集

本文将分享如何在 Django 中使用单个查询集选择记录并更新它?的详细内容,并且还将对django或查询进行详尽解释,此外,我们还将为大家带来关于django 如何找到两个查询集(querySet)的并集?、Django 查询集使用注释获得单个 id 的最大分数、sql – 使用django如何将来自不同模型的两个查询组合成一个查询?、sql – 使用单个查询更新多个表列值的相关知识,希望对你有所帮助。

本文目录一览:

如何在 Django 中使用单个查询集选择记录并更新它?(django或查询)

如何在 Django 中使用单个查询集选择记录并更新它?(django或查询)

如何在相同的情况下运行updateandselect语句,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 如何找到两个查询集(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 的最大分数

如何解决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如何将来自不同模型的两个查询组合成一个查询?

sql – 使用django如何将来自不同模型的两个查询组合成一个查询?

在我的具体情况下,我有两种“消息”,我需要检索和分页.

我们忽略细节,只是说第一种是一个名为Msg1的模型,另一个叫做Msg2

这两个模型的领域是完全不同的,两个模型共有的唯一字段是“日期”和“标题”(当然,id).

我可以得到Msg1.objects.all()和Msg2.objects.all(),但我可以将这两个查询组合成一个查询,按日期排序,并分页?

我需要保留查询的懒惰性质.

简单的解决方案是列出(查询)两个查询并将它们组合在一个python列表中.但由于明显的原因,这是无效率的.

我在模型和dp-api上查看了django引用,但似乎没有办法将不同模型/表的查询组合成一个.

解决方法

我建议你使用 Model inheritance.

创建一个包含日期和标题的基本模型.子类Msg1和Msg2如下所述.使用基本模型进行所有查询(填写页面),然后在最后一刻切换到派生类型.

关于继承的真正伟大的事情是,django然后允许你使用来自其他模型的外键的基本模型,所以你可以使你的整个应用程序更加灵活.在引擎盖下,它只是一个基础模型的表,每个子模型的表包含一对一的键.

sql – 使用单个查询更新多个表列值

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 – 使用单个查询更新多个表列值等更多相关知识的信息可以在本站进行查询。

本文标签: