小编Mik*_*ham的帖子

Python数据类生成哈希并排除不安全字段

我有这个数据类:

from dataclasses import dataclass, field
from typing import List

@dataclass
class Person:
    name: str
    dob: str
    friends: List['Person'] = field(default_factory=list, init=False)
Run Code Online (Sandbox Code Playgroud)

name并且dob是不可变的并且friends是可变的。我想生成每个人对象的哈希值。我可以以某种方式指定要包含和排除哪个字段来生成__hash__ 方法吗?在这种情况下,namedob应该包含在生成哈希中,但friends不应该包含。这是我的尝试,但没有成功

@dataclass
class Person:
    name: str = field(hash=True)
    dob: str = field(hash=True)
    friends: List['Person'] = field(default_factory=list, init=False, hash=False)
Run Code Online (Sandbox Code Playgroud)
>>> hash(Person("Mike", "01/01/1900"))
Traceback (most recent call last):
  File "<pyshell#43>", line 1, in <module>
    hash(Person("Mike", "01/01/1900"))
TypeError: unhashable type: 'Person'
Run Code Online (Sandbox Code Playgroud)

我也找不到设置namedob冻结的方法。仅仅从声音来看,我不会将其设置unsafe_hash为。 …

python python-dataclasses

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

索引不会提高性能,有时会使情况变得更糟

我有一张桌子EMPLOYEE(EMP_ID, EMP_NAME, DESC, SALARY),我想找回所有可以做魔术的员工.如果每个员工都存储在每个员工的每个DESC条目的末尾,那么能够执行魔术就被归类为人才和人才.

如果一个员工有任何才能,那么该DESC员工的最终结果就是'Talent: __talent_here__'.例如,乔擅长杂耍,然后他的描述就像是'Joe Doe, works here since 2011. Talent: juggling'.我可以假设,在每一个描述有字符串常量只有一个实例'Talent: ',人才总是存储在的结束DESC,而不是所有的员工都有人才.我还想对按名称检索的员工进行排序,我只想要前50个排序值

这是SELECT我目前正在发表的声明.

SELECT * FROM (
    SELECT E.EMP_NAME FROM EMP E
    WHERE INSTR(E.DESC, 'Talent: ') > 0
        AND INSTR(SUBSTR(E.DESCRIPTION, INSTR(E.DESC, 'Talent: ')), 'magic') > 0
    ORDER BY E.EMP_NAME ASC
) WHERE ROWNUM <= 50
/
Run Code Online (Sandbox Code Playgroud)

这个SELECT说法很好.现在我想在查询上创建索引以改善运行时间:

CREATE INDEX MAGICIANS ON EMP(
    INSTR(DESCRIPTION, 'Talent: '), 
    INSTR(SUBSTR(DESCRIPTION, INSTR(DESCRIPTION, 'Talent: ')), 'magic')) …
Run Code Online (Sandbox Code Playgroud)

sql oracle indexing performance oracle11g

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