想象一下以下模型:
class Parent(Model):
...
class Child(Model)
father = ForeignKey(Parent)
...
Run Code Online (Sandbox Code Playgroud)
有些父母有孩子,有些则没有孩子(他们不是真正意义上的父母,只是虚构的名字).
我想提出以下问题:我想列出所有的父母,如果他们有孩子,也请带孩子.这相当于Child表的左外连接,即:
select * from app_parent left join app_child on child_father_id=parent_id
Run Code Online (Sandbox Code Playgroud)
这样,当我在模板中调用Parent.child_set时,我不会在数据库中访问数十亿次.有没有办法做到这一点?谢谢
我最近升级到Django 1.2.5,现在我遇到了本地化问题,特别是数字格式.例如,在某些模板中,我打印以下示例:
data-id="{{ form.instance.id }}"
Run Code Online (Sandbox Code Playgroud)
在> = 1000的情况下,用于评估:
data-id="1235"
Run Code Online (Sandbox Code Playgroud)
但现在它实际上导致了(我的本地化是pt-BR,我们的小数点分隔符是点):
data-id="1.235"
Run Code Online (Sandbox Code Playgroud)
当我以后通过ID查询数据库时,当然找不到.使用|safe过滤器可以解决问题,但我不愿意在所有模板中找到所有ID并保护它们.
通常,我只会定位浮点数,而不是整数.我不想禁用L10N,因为所有其他格式都正常工作.有没有办法在Django本地化中做出这种区分?接受任何其他解决方案.
我正在尝试安装位于已安装目录中的 Python(C 扩展,如果重要的话)包,出于安全原因,该包是只读的。但是,默认情况下,pip 会在其自己位置调用的子目录中构建包build,但我不能这样做。
$ pip install /mnt/remote/pkgname
Processing /mnt/remote/pkgname
Preparing metadata (setup.py) ... done
Using legacy 'setup.py install' for pkgname, since package 'wheel' is not installed.
Installing collected packages: pkgname
Attempting uninstall: pkgname
Found existing installation: pkgname 1.0.0
Uninstalling pkgname-1.0.0:
Successfully uninstalled pkgname-1.0.0
Running setup.py install for pkgname ... error
ERROR: Command errored out with exit status 1:
command: /path/to/venv/bin/python3.8 -u -c 'import io, os, sys, setuptools, tokenize; sys.argv[0] = '"'"'/mnt/remote/pkgname/setup.py'"'"'; __file__='"'"'/mnt/remote/pkgname/setup.py'"'"';f = getattr(tokenize, '"'"'open'"'"', open)(__file__) if …Run Code Online (Sandbox Code Playgroud) 我在Django有几个项目,偶尔在一个和另一个之间交替.所有这些都有一个/ media/path,由django.views.static.serve提供,它们都有一个/media/css/base.css文件.
问题是,每当我运行一个项目时,对base.css的请求都会返回HTTP 304(未修改),可能是因为时间戳没有改变.但是当我运行另一个项目时,返回相同的304,使浏览器使用前一个项目缓存的文件(因此,使用错误的样式表).
仅供记录,以下是中间件类:
MIDDLEWARE_CLASSES = (
'django.middleware.common.CommonMiddleware',
'django.contrib.sessions.middleware.SessionMiddleware',
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.middleware.transaction.TransactionMiddleware',
)
Run Code Online (Sandbox Code Playgroud)
我总是使用默认地址http:// localhost:8000.还有其他解决方案(除了使用不同的端口 - 8001,8002等)?
我有一个大型测试套件(1000 多个测试),总共运行 3-4 分钟,或者直到弹出第一个错误(使用 运行--failfast)。当测试失败并修复它时,我想从该测试开始并继续运行其他测试。(我知道更改可能会影响之前的测试,但每次都运行它们似乎很浪费)
查看python manage.py test --help,我看不到从上次失败开始运行测试套件的选项。如何做呢?
使用假设的模式:
CREATE TABLE obj (id INT, name VARCHAR);
CREATE TABLE objprop (obj_id INT, key VARCHAR, value VARCHAR);
INSERT INTO obj VALUES
(1, 'Object 1'),
(2, 'Object 2'),
(3, 'Object 3');
INSERT INTO objprop VALUES
(1, 'created', '2020-02-16'),
(1, 'updated', '2020-02-28'),
(2, 'created', '2020-02-01');
Run Code Online (Sandbox Code Playgroud)
我能否获取对象列表(每行一个)以及表示对象属性的 JSON 字段?
我知道我可以使用ARRAY()带有子查询的函数来检索值数组,例如:
SELECT id, name, ARRAY(SELECT value FROM objprop where obj_id=id) values FROM obj;
+----+----------+------------------------------+
| id | name | values |
+----+----------+------------------------------+
| 1 | Object 1 | {'2020-02-16', '2020-02-28'} |
| …Run Code Online (Sandbox Code Playgroud) 例如:
>>> s = 'string'
>>> hasattr(s, 'join')
True
>>> 'join' in dir(s)
True
Run Code Online (Sandbox Code Playgroud)
Python文档说,hasattr实现调用getattr并查看它是否引发异常.然而,这导致了很大的开销,因为丢弃了所获得的值并且可能引发异常.
问题是,如果呼叫'attribute' in dir(obj)意味着同一件事,它是否更快,更安全,还是在特定场合可能失败?
当有缩写点时,spaCy 会错误地分割句子。
import spacy
tool = spacy.load('en')
x = tool('It starts at 9:00 a.m. Eastern Standard Time.')
list(x.sents)
Run Code Online (Sandbox Code Playgroud)
产生两个句子而不是一个。我该如何正确地做到这一点?
我正在尝试从alembic修订版生成SQL脚本,但是当我运行时:
alembic upgrade head --sql
Run Code Online (Sandbox Code Playgroud)
它输出所有修订版的SQL ,因为中间有一个破坏性的修订版(我还没弄清楚为什么),我从那时起就无法获得脚本.而且,我只想要最后一个版本的SQL脚本.
有没有参数可以得到它?
如果存在,这些元素在 Python 模块中声明的顺序是什么?
#!/usr/bin/env python)# coding: utf-8)from __future__ import unicode_literals, ...)如果最后声明,文档字符串会在调用中工作help(module)吗?
在我构建的蜘蛛中,我需要登录网站才能开始执行请求(这很简单),然后我通过一个循环来执行数千个请求。
但是,特别是在这个网站上,如果我不退出,我会收到 10 分钟的惩罚,然后我才能再次登录。所以我尝试在循环完成后以较低的优先级注销,如下所示:
def parse_after_login(self, response):
for item in [long_list]:
yield scrapy.Request(..., callback=self.parse_result, priority=100)
# After all requests have been made, perform logout:
yield scrapy.Request('/logout/', callback=self.parse_logout, priority=0)
Run Code Online (Sandbox Code Playgroud)
但是,不能保证在其他请求完成处理之前注销请求不会准备好,因此过早注销将使其他请求无效。
我发现无法使用spider_closed信号执行新请求。
在所有其他请求完成后,如何执行新请求?
我需要在一行中编写代码,该代码将显示一个排序的数组,在该数组上以负数为模(它们在屏幕上显示为负数)
例:
data = [4, -30, 100, -100, 123, 1, 0, -1, -4]
output:
[0, 1, -1, 4, -4, -30, 100, -100, 123]
Run Code Online (Sandbox Code Playgroud)
data = [4, -30, 100, -100, 123, 1, 0, -1, -4]
def is_module(x):
if x < 0:
return 0
else:
return 1
print(sorted([data[x] for x in range(len(data)) if is_module(data[x])]))
Run Code Online (Sandbox Code Playgroud)
我期望这样:
[0, 1, -1, 4, -4, -30, 100, -100, 123]
Run Code Online (Sandbox Code Playgroud) python ×6
django ×4
alembic ×1
caching ×1
left-join ×1
localization ×1
pip ×1
postgresql ×1
python-c-api ×1
scrapy ×1
spacy ×1
subquery ×1
testing ×1