小编Mac*_*iek的帖子

如何在Django迁移中创建GIN索引

在Django中,从版本1.11开始,我们有一个PostgreSQL类GinIndex(https://docs.djangoproject.com/en/1.11/ref/contrib/postgres/indexes/).我想创建一个迁移,在VectorSearchField我添加到我的一个表中构建这样的索引.到目前为止,我试图简单地添加db_index=TrueVectorSearchField,但失败了,因为它试图创建一个B树索引(我认为),并且VectorSearchField值太长.

我设法通过运行migrations.RunSQL()迁移来创建我想要的索引:

CREATE INDEX entryline_sv_index ON entryline USING GIN (sv);
Run Code Online (Sandbox Code Playgroud)

但是,我想,因为GinIndexDjango中有一个特殊的类,也许有一种方法可以在不执行原始SQL的情况下创建这样的索引?

这是一个模型类:

import django.contrib.postgres.search as pg_search

class EntryLine(models.Model):
    speaker = models.CharField(max_length=512, db_index=True)
    text = models.TextField()
    sv = pg_search.SearchVectorField(null=True)  # I want a GIN index on this field.
Run Code Online (Sandbox Code Playgroud)

知道如何sv在迁移中正确创建字段索引吗?或者CREATE INDEX ...以最佳方式执行查询?

migration django postgresql indexing django-migrations

11
推荐指数
1
解决办法
3260
查看次数

将不是7位ASCII的字母翻译成ASCII(如ñ到n和±到a)

我正在寻找一种快速且可能方便的方法在Python 3中将带有非ascii字母的字符串转换为仅带有ascii字母的字符.

例子!

żółw=> zolw

móżdżek=> mozdzek

łódź=>罗兹

等等...

国家字母表中有许多字母可以转换成ASCII字母(如ñ到n).我可以通过指定如何翻译每个字母来手动完成我的语言(波兰语).但有没有自动化的方法呢?或者某些图书馆会做我需要的东西?

蟒蛇str.encode()不会做,因为"?ó?w".encode('ascii', 'replace') == "???w""?ó?w".encode('ascii', 'ignore') == "w"...

我可以为波兰语字母做这样的翻译,但我不想为其他所有语言都这样做:

>>> utf8_letters = ['?','?','?','?','?','ó','?','?','?']
>>> ascii_letters = ['a','e','c','z','z','o','l','n','s']
>>> trans_dict = dict(zip(utf8_letters,ascii_letters))
>>> turtle = "?ó?w"
>>> out = []
>>> for l in turtle:
...   out.append(trans_dict[l] if l in trans_dict else l)
>>> result = ''.join(out)
>>> result
'zolw'
Run Code Online (Sandbox Code Playgroud)

上面的代码完成了我想要的波兰语字母,但它很难看:<最好的方法是什么?

当然这样的翻译会改变一些单词的含义,但那没关系.

python string ascii utf-8

8
推荐指数
1
解决办法
1487
查看次数

如何抑制PyCharm中的语法检查?

我正在使用PyCharm 3.4.1,我在我的函数中有这段代码:

cursor.execute('SELECT distinct "name_{0}", code, sort_order FROM {1}'.format(get_language(), ProgrammeLevel._meta.db_table))
Run Code Online (Sandbox Code Playgroud)

PyCharm正确地识别出该字符串包含SQL代码,但是代码语法检查告诉我我有语法错误,因为FROM {1}它说:<comma join expression> expected, got '{'这是一个有效点,但我知道我在做什么.

对于大多数(如果不是全部)PyCharm检查,我可以# noinspection在正确的位置写评论并关闭一些代码.我这样做了,关闭PyProtectedMember我刚刚给出的代码片段的检查.如何关闭此行代码的语法检查?给noinspection评论的检查名称是什么?

code-inspection pycharm

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