小编Ane*_*pic的帖子

Django - 带有 Single True 的布尔字段

我想要一个布尔字段,仅允许其中一个基于外键(User )为True。我现在知道如何表达它或真正搜索它,但我能够得到一个简单的实现,但我不喜欢它。感觉很笨拙而且错误。无论如何,理解我的意思的最好方法就是你看到它,在这里:

class MyModel(models.Model):
    owner = models.ForeignKey(User)
    _is_main = models.BooleanField(default=False)

    def __get_is_main(self):
        return self._is_main

    def __set_is_main(self, is_main):
        if (is_main):
            active_keys = API_Key.objects.filter(_is_main=True, owner=self.owner)
            if (len(active_keys) == 1 and self in active_keys):
                return
            else:
                for key in active_keys:
                    if (key.is_main):
                        key.is_main = False
                        key.save()
        self._is_main = is_main
        self.save()

    is_main = property(__get_is_main, __set_is_main)
Run Code Online (Sandbox Code Playgroud)

我只希望每个所有者的is_main 为True一次,最多一次。这些用于 API 密钥。因此,所有者可以拥有多个 API 密钥,但只能将一个设置为主密钥。这是我能弄清楚如何实现这一点的唯一方法。有人有更好的方法来做到这一点吗?如果有必要的话我正在使用MySQL。

python database django django-models

5
推荐指数
1
解决办法
2262
查看次数

在大型数据集上使用ADD COLUMN的含义

Redshift的文件说:

ALTER TABLE locks the table for reads and writes until the operation completes.
Run Code Online (Sandbox Code Playgroud)

我的问题是:
假设我有一个包含5亿行的表,我想添加一列.这听起来像一个沉重的操作,可以锁定桌子很长一段时间 - 是吗?或者它实际上是一个快速操作,因为Redshift是一个柱状数据库?或者它取决于列是否可为空/具有默认值?

amazon-redshift

5
推荐指数
2
解决办法
3420
查看次数

使用 ppxlib 生成 AST 时如何处理不同的 OCaml 版本

我正在制作一个 ppx 扩展重写器作为代码库的一部分

理想情况下,该库可与某些 OCaml 版本一起使用

我注意到,当构建 AST 节点以从我的重写器输出时,不可避免地必须构造一些记录,其结构特定于特定的 OCaml AST 版本

例如,在构建变体类型声明时,我们必须定义如下记录:

    {
      pcd_name = {txt = name; loc};
      pcd_args = Pcstr_tuple [];
      pcd_res = None;
      pcd_loc = loc;
      pcd_attributes = [];
    }
Run Code Online (Sandbox Code Playgroud)

是哪一种constructor_declaration类型

然而,这种 AST 类型在OCaml 4.13OCaml 4.14之间有所不同

我希望大多数 ppxlibAst_builder帮助程序能够为我正在编译库的任何 OCaml 版本生成正确的 AST 版本。

但在我必须手动定义这些记录实例之一的地方,我可能需要检测当前的 OCaml 版本并以这种方式返回正确的记录格式?

我找到了这个:

utop # Sys.ocaml_version;;
- : string = "4.12.1"
Run Code Online (Sandbox Code Playgroud)

所以想必我应该解析这个字符串,int * int * int以便我可以对 4.14.0 之后的版本进行安全比较

有没有更好的方法,或者我应该做一些不同的事情?

ocaml ppx

5
推荐指数
1
解决办法
70
查看次数

尝试通过 cabal 安装 hashable 时出现“致命错误:找不到‘ffi.h’文件”

我在 Macos 上(M1 MacBook Air)

我通过 ghcup 安装了 Haskell 工具链,目前已ghc设置为 9.6.1

我运行了cabal build该项目,但安装依赖项之一失败:

Building library for hashable-1.4.2.0..
[1 of 7] Compiling Data.Hashable.Imports ( src/Data/Hashable/Imports.hs, dist/build/Data/Hashable/Imports.o, dist/build/Data/Hashable/Imports.dyn_o )
[2 of 7] Compiling Data.Hashable.LowLevel ( src/Data/Hashable/LowLevel.hs, dist/build/Data/Hashable/LowLevel.o, dist/build/Data/Hashable/LowLevel.dyn_o )

/var/folders/w1/_vgkxyln4c7bk8kr29s1y1k00000gn/T/ghc83995_0/ghc_10.c:4:10: error:
     fatal error: 'ffi.h' file not found
  |
4 | #include <ffi.h>
  |          ^
#include <ffi.h>
         ^~~~~~~
1 error generated.

<no location info>: error:
    `gcc' failed in phase `C Compiler'. (Exit code: 1)
Error: cabal: Failed to build …
Run Code Online (Sandbox Code Playgroud)

haskell

5
推荐指数
1
解决办法
1464
查看次数

如何使用 xunit 风格的 setup_function

文档说:

如果您更愿意直接在模块级别定义测试函数,您还可以使用以下函数来实现夹具:

def setup_function(function):
    """ setup any state tied to the execution of the given function.
    Invoked for every test function in the module.
    """

def teardown_function(function):
    """ teardown any state that was previously setup with a setup_function
    call.
    """
Run Code Online (Sandbox Code Playgroud)

但实际上不清楚你应该如何使用它们。

我尝试将它们完全如上所示放入我的测试文件中,但它们没有被调用。仔细观察它们,使用该function参数,它们看起来像装饰器。所以我试图找到一种方法:

@pytest.setup_function
def my_setup():
    # not called
Run Code Online (Sandbox Code Playgroud)

不过,我找不到任何地方可以从中导入一个装饰器,所以这是不对的。

在 grokbase上找到了这个帖子,有人解释说你可以这样做:

 @pytest.fixture(autouse=True)
 def setup_function(request):
     # this one gets called
Run Code Online (Sandbox Code Playgroud)

它有效,但它似乎不再与文档相关......没有理由在setup_function这里调用它。

python pytest

4
推荐指数
1
解决办法
2967
查看次数

一对多关系中的Django查询

我有2个表Order和OrderDetails,在OrderDetails上我有一个字段“ product_type”。

我想从表Order中获取列表中的所有product_type字段。

Order.objects.filter(pk=1).annotate(type=F('product_type'))

我希望该type值返回所有产品类型的列表,而不仅仅是“椅子”之类的第一个结果。

例如: type = ['chair', 'pencil']

楷模:

class Order(models.Model):
    user = models.ForeignKey(User, related_name="orders")

class OrderDetails(models.Model):
    order = models.ForeignKey(Order, related_name="details")
    quantity = models.SmallIntegerField(null=False, blank=False)
    product_type = models.CharField(null=False, blank=False)
Run Code Online (Sandbox Code Playgroud)

python mysql django

4
推荐指数
1
解决办法
4778
查看次数

“事实数据库”不是miniKanren的核心功能吗?

我一直在玩 miniKanren,试图通过将非常基本的 Prolog 教程转换成它来理解它。

我习惯使用 Python,所以我从 LogPy 库开始,该库后来被分叉和改进为一个实际上称为miniKanren 的库

从lib的README中给出的示例我们可以看到:

>>> from kanren import Relation, facts
>>> parent = Relation()
>>> facts(parent, ("Homer", "Bart"),
...               ("Homer", "Lisa"),
...               ("Abe",  "Homer"))

>>> run(1, x, parent(x, "Bart"))
('Homer',)
Run Code Online (Sandbox Code Playgroud)

这与您在 Prolog 教程开始时可能看到的内容基本对应,例如:

% facts.pl
parent(homer, bart).
parent(homer, lisa).
parent(abe, homer).

?- consult('facts')
true.

?- parent(X, bart).
X = homer
Run Code Online (Sandbox Code Playgroud)

我对此感到很高兴...

后来我发现自己阅读了更多的 MiniKanren 文献(一般意义上,不是 Python 库),我意识到我还没有看到任何以这种方式使用事实数据库的示例,也没有提到过这样的示例。

我错过了吗?或者这实际上不是 MiniKanren 的一个“理性策划者”的功能?

我确实在 Clojure 实现中找到了这样的东西core.logic,其中有:https: //github.com/clojure/core.logic/wiki/Features#simple-in-memory-database

它的工作方式非常相似,尽管比 python 更好,因为数据库是一个不同的实体,而不是库中的全局变量。

python lib 是否只是借用了非 kanren 的想法 …

minikanren clojure-core.logic knowledge-base-population reasoned-schemer

4
推荐指数
1
解决办法
699
查看次数

将列从时间戳更改为时间戳会锁定表吗?

我想将一列从timestamp(无时区)迁移到timestamptz类型。

我在 Postgres 9.3.9 上。

我需要知道此操作是否会导致表重写(锁定表),因为我的表很大并且数据库处于活动状态。

我在9.2 发行说明中发现了这一点:

增加 varchar 或 varbit 列的长度限制,或完全删除限制,不再需要重写表。同样,增加数值列的允许精度,或将列从受约束的数值更改为不受约束的数值,不再需要重写表。在涉及间隔、时间戳和时间戳记类型的类似情况下,也可以避免表重写。

这听起来很有希望,但实际上并没有详细说明“类似案例”可能是什么。

如果此操作要锁住我会很感激了如何解决这个在实时数据库在不中断服务的建议表。

postgresql concurrency timestamp alter-table postgresql-9.3

3
推荐指数
1
解决办法
1721
查看次数

是否有针对类型类型的规范“isinstance”实现?

您可以\xe2\x80\x99t 使用类型类型,例如Dict[str, int]在检查中isinstance

\n\n
Python 3.7.6 (default, Dec 30 2019, 19:38:28)\nType \'copyright\', \'credits\' or \'license\' for more information\nIPython 7.12.0 -- An enhanced Interactive Python. Type \'?\' for help.\n\nIn [1]: from typing import Dict\n\nIn [2]: myvar = {"a": 1}\n\nIn [3]: isinstance(myvar, Dict[str, int])\n---------------------------------------------------------------------------\nTypeError                                 Traceback (most recent call last)\n<ipython-input-3-a8fee57141ae> in <module>\n----> 1 isinstance(myvar, Dict[str, int])\n
Run Code Online (Sandbox Code Playgroud)\n\n

然而,任何进行类型检查的库都需要能够执行类似的操作isinstance(myvar, Dict[str, int])(...我意识到它应该被称为与 不同的东西isinstance,这不是完全相同的事情)

\n\n

我觉得适用于打字的等效函数必须存在于某个地方,也许在mypy项目中?(但是里面\xe2\x80\x99s有很多复杂的代码,到目前为止我找不到\xe2\x80\x99)

\n\n

除了 mypy 之外,还有很多项目需要这个,例如像pydantic和 AFAICT 这样的库,它们都有复杂的手动实现,并且似乎有很多边缘情况(或者只是 …

python-3.x mypy python-typing pydantic

3
推荐指数
1
解决办法
1492
查看次数

Django Haystack自动查询:HAYSTACK_DEFAULT_OPERATOR ='AND'没有结果

(更新:问题特定于自动查询的使用)

据我从文档以及从源代码可以看出,该HAYSTACK_DEFAULT_OPERATOR设置应控制.filter(...)在查询集上链接子句时如何组合子句。

但是当我AutoQuery额外使用时,似乎正在控制所有单词是否匹配,或者短语中的任何单词都匹配。(我正在使用ElasticSearch)

例如:

HAYSTACK_DEFAULT_OPERATOR = 'OR'
sqs = SearchQuerySet().filter(content=AutoQuery('some of these words are in my content'))
sqs.count() = 53

HAYSTACK_DEFAULT_OPERATOR = 'AND'
sqs = SearchQuerySet().filter(content=AutoQuery('some of these words are in my content'))
sqs.count() = 0
sqs = SearchQuerySet().filter(content=AutoQuery('all these words are in the content'))
sqs.count() = 1
Run Code Online (Sandbox Code Playgroud)

奇怪的是,使用filter_orfilter_and似乎没有任何区别。例如

HAYSTACK_DEFAULT_OPERATOR = 'AND'
sqs = SearchQuerySet().filter_or(content=AutoQuery('some of these words are in my content'))
sqs.count() = 0
Run Code Online (Sandbox Code Playgroud)

答案必须在干草堆源代码中的某个地方,我将继续寻找,至少在文档中这似乎是一个缺陷。 …

django-haystack elasticsearch

2
推荐指数
1
解决办法
1105
查看次数