我正在寻找创建一个稍微复杂的查询,使用原始SQL很容易编写.以下是raw中查询的示例:
SELECT my,fields FROM sales WHERE is_paid = False OR status ='toship'AND otherfield ='FOO'AND another ='BAR'
这很简单,它生成所有结果为is_paid = False,然后为我的AND匹配生成第二个结果集.
现在我知道了Q对象,我知道有关过滤但是我似乎无法完全理解如何在Django ORM中实现这一目标.
有小费吗?
谢谢
我正在使用看起来像这样的查询:
filters = Q(is_default = False)
# Build the excludes and filters dynamically
if cut:
filters = filters & Q(mailbagstats__num_letters2__gt = int(cut) )
Run Code Online (Sandbox Code Playgroud)
鉴于filters
Q
查询,我可以查询pop
其中一个吗?
我想Q(mailbagstats__num_letters2__gt= int(cut) )
从此Q查询中删除查询,以获取新的过滤器.
通常情况下,我使用列表,reduce
但这个是通过构造, Q() & Q()
所以我不知道如何修改它.
感谢您提供的任何输入!
# ANDing Q objects
q_object = Q()
q_object.add(Q(), Q.AND)
# ORing Q objects
q_object = Q()
q_object.add(Q(), Q.OR)
Run Code Online (Sandbox Code Playgroud)
>>> import operator
# create a list of Q objects
>>> mylist = [Q(question__contains='dinner'), Q(question__contains='meal')]
# OR
>>> Poll.objects.filter(reduce(operator.or_, mylist))
[<Poll: what shall I make for dinner>, <Poll: what is your favourite meal?>]
# AND
>>> Poll.objects.filter(reduce(operator.and_, mylist))
[]
Run Code Online (Sandbox Code Playgroud)
这种技术可能非常有用,例如,对于使用条件过滤器的页面构建查询,就像在eBay上一样.
但是,据我所知,这些事情没有记录,所以这个问题的最佳实践是什么,不会从支持中删除,也不会混淆那些会阅读我代码的人?
ps
而且 - 对Q()对象使用"&"运算符是否很好?在Django-docs中,我一无所获!
我有一个数据集合,由|
字符分隔.我要将数据集添加到mongodb.所以我需要通过|
字符分隔数据.我的mongoimport命令怎么样?
以前,我通过以下命令成功导入csv文件.
$ mongoimport -d mydb -c things --type csv --file locations.csv --headerline
Run Code Online (Sandbox Code Playgroud) 我有一个表"campaign_items",其中包含列(预算,花费),我想使用公式剩余预算计算剩余预算=预算 - 已用完
现在我在查询下运行:
select distinct a.budget,a.spent
from campaign_items a
where campaign_item_id=12345
order by a.budget-a.spent
Run Code Online (Sandbox Code Playgroud)
但是我收到了错误:
错误:对于SELECT DISTINCT,ORDER BY表达式必须出现在选择列表中
注意:我无法DISTINCT
从查询中删除关键字,因为查询是使用JdbcTemplate生成的
任何人都可以帮我解决这个错误吗?
我看到 StringValue 是字符串消息的消息包装器,我尝试将其用于:
service SomeService {
// health
rpc HealthCheck(google.protobuf.Empty)
returns (google.protobuf.Empty) {}
// create
rpc CreateSomething(SomeMessageType)
returns (StringValue) {}
}
Run Code Online (Sandbox Code Playgroud)
但是,我从 protoc 收到一条消息,例如:
somefile.proto:30:14: "StringValue" 未定义。
我正在使用 proto3 语法。我错过了什么?
示例模型:
class Book(models.Model):
title = models.TextField()
class Author(models.Model):
book = models.ForeignKey(Book)
name = models.CharField(max_length=50)
Run Code Online (Sandbox Code Playgroud)
和一些示例数据:
Book:
id title
1 test111
2 test222
3 test333
4 test444
Author:
book_id name
1 test111
1 test222
2 test222
2 test333
3 test111
3 test333
4 test111
4 test333
Run Code Online (Sandbox Code Playgroud)
我想获取所有作者姓名包含“111”和“333”的书(因此所有至少有 2 个作者的书:第一个名称为 111,第二个名称为 333)
我可以通过使用链查询来达到这个目标:
books = Book.objects.filter(author__name__icontains="111").filter(author__name__icontains="333")
Run Code Online (Sandbox Code Playgroud)
返回两本书,id 为:3 和 4
有没有办法通过使用 Q 对象来达到上述目标?
什么会有更好的表现?哪个更快?这意味着更低的db负载?
Item.objects.filter(Q(creator=owner) | Q(moderated=False))
Run Code Online (Sandbox Code Playgroud)
要么
result = Item.objects.filter(item.creator = owner) | Item.objects.filter(item.moderated = False)
Run Code Online (Sandbox Code Playgroud) 过去几个月我在 python IDE 中使用 vim,但最近遇到了一个新问题。每当我按下 . (点)在插入模式下,光标不会移动到下一个位置,而是保持在同一位置,并且当我按下 时会发出砰砰声。(点)键。这个问题不让我正确编码。
下面是一张图片。解释问题:-
在这里,当我写作时turtle.
,问题来了,我必须使用箭头键明确地移动一步。请告诉我是否需要上传我的 .vimrc 文件
谢谢
我有jenkins作为Docker容器运行,我试图在这里安装jenkins构建和发布插件并在jenkins工作区内复制Dockerfile,但每当我运行构建时,它都会给我:
Started by user Jenkins Admin
Building in workspace /var/lib/jenkins/jobs/workspace
[workspace] $ docker build -t index.docker.io/test/openshift:latest --pull=true /var/lib/jenkins/jobs/test/workspace
ERROR: Cannot run program "docker" (in directory "/var/lib/jenkins/jobs/workspace"): error=2, No such file or directory
java.io.IOException: Cannot run program "docker" (in directory "/var/lib/jenkins/jobs/workspace"): error=2, No such file or directory
at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
at hudson.Proc$LocalProc.<init>(Proc.java:244)
at hudson.Proc$LocalProc.<init>(Proc.java:216)
at hudson.Launcher$LocalLauncher.launch(Launcher.java:803)
at hudson.Launcher$ProcStarter.start(Launcher.java:381)
Build step 'Docker Build and Publish' marked build as failure
Finished: FAILURE
Run Code Online (Sandbox Code Playgroud)
你能告诉我为什么会这样吗?