小编Jer*_*emy的帖子

保留整个物体VS不要寻找东西

我正在阅读福勒的重构书,并看到了保留整个对象.一个不同的,更新的观点说,这种重构与你应该做的完全相反:清洁代码会谈 - 不要寻找东西!.

Fowler确实提到过,您应该查看该方法是否可以移动到使用大型参数列表的类.我认为这将是唯一合理的选择.这种重构看起来像是一种定义不明确的方法的创可贴.

福勒的源材料有点陈旧.流行的智慧是让这种技术成为渡渡鸟的方式,还是在你想要进行这种重构的时候?或者我误解了测试驱动的风格,因为这些例子涉及对象构造,而不是消息发送?

oop refactoring

6
推荐指数
1
解决办法
808
查看次数

使用 vim 外部命令调用 bash 函数

我使用 vim 的 :! 一直是外部命令函数,通常提供 % 作为 shell 命令的参数。例如 :

:!psql -f %
Run Code Online (Sandbox Code Playgroud)

我在我使用的 .bashrc 中也有很多 bash shell 函数。例如:

psql-h1 () 
{ 
    /usr/bin/psql -hh1 -d mydb "$@"
}
Run Code Online (Sandbox Code Playgroud)

这些 bash 函数不能从 :! vim 里面。有没有办法让它们可用?

vim bash

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

Pydantic:检测字段值是否缺失或为空

我希望允许用户使用 PUT 调用有选择地更新字段。在 pydantic 模型上,我将字段设为可选。在 FastAPI 处理程序中,如果模型属性为 None,则未给出该字段并且我不更新它。

这种方法的问题在于客户端无法“清除”某些类型不需要的字段。

特别是,我希望客户端能够通过在 JSON 中发送空值来清除日期字段。如何检测客户端发送 null 或客户端根本不发送字段/值之间的差异?在任何一种情况下,模型属性都只是 None 。

python pydantic

4
推荐指数
3
解决办法
2198
查看次数

使用来自 self 的值更新 PostgreSQL 表

我正在尝试使用同一表中另一行的值更新表中的多个列

CREATE TEMP TABLE person (
  pid INT
 ,name VARCHAR(40)
 ,dob DATE
 ,younger_sibling_name VARCHAR(40)
 ,younger_sibling_dob DATE
);

INSERT INTO person VALUES (pid, name, dob)
(1, 'John', '1980-01-05'),
(2, 'Jimmy', '1975-04-25'),
(3, 'Sarah', '2004-02-10'),
(4, 'Frank', '1934-12-12');
Run Code Online (Sandbox Code Playgroud)

任务是来填充younger_sibling_name,并younger_sibling_dob用最接近他们年龄的人的姓名和出生的日子,但不是旧的或相同的年龄。

我可以dob轻松设置弟弟妹妹,因为这是确定要与相关子查询一起使用的记录的值(我认为这是一个例子?):

UPDATE person SET younger_sibling_dob=(
SELECT MAX(dob)
FROM person AS sibling
WHERE sibling.dob < person.dob);
Run Code Online (Sandbox Code Playgroud)

我只是看不到任何方法来获得name? 对于每个 MAX 选择
实际查询将运行大约100 万条记录,每组 100-500 条,因此性能是一个问题。

编辑:

在尝试了许多不同的方法后,我决定采用这种方法,我认为它可以很好地平衡能够用中间结果验证数据,显示逻辑的意图,并充分执行:

WITH sibling AS ( …
Run Code Online (Sandbox Code Playgroud)

sql postgresql correlated-subquery window-functions sql-update

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