- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在使用 Scrapy 从网络论坛中抓取数据。我使用 SQLAlchemy 将此数据存储在 PostgreSQL 数据库中。表和列创建得很好,但是,我无法让 SQLAlchemy 在其中一个列上创建索引。我正在尝试使用 Gin 创建三元组索引 (pg_trgm)。
创建这个索引的 Postgresql 代码是:
CREATE INDEX description_idx ON table USING gin (description gin_trgm_ops);
我添加到 models.py 文件中的 SQLAlchemy 代码是:
desc_idx = Index('description_idx', text("description gin_trgm_ops"), postgresql_using='gin')
我已将此行添加到我的 models.py,但是当我 checkin postgresql 时,从未创建索引。
下面是我的完整 models.py 和 pipelines.py 文件。我这样做是不是错了??
任何帮助将不胜感激!!
from sqlalchemy import create_engine, Column, Integer, String, DateTime, Index, text
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.engine.url import URL
import settings
DeclarativeBase = declarative_base()
def db_connect():
return create_engine(URL(**settings.DATABASE))
def create_forum_table(engine):
DeclarativeBase.metadata.create_all(engine)
class forumDB(DeclarativeBase):
__tablename__ = "table"
id = Column(Integer, primary_key=True)
title = Column('title', String)
desc = Column('description', String, nullable=True)
desc_idx = Index('description_idx', text("description gin_trgm_ops"), postgresql_using='gin')
from scrapy.exceptions import DropItem
from sqlalchemy.orm import sessionmaker
from models import forumDB, db_connect, create_forum_table
class ScrapeforumToDB(object):
def __init__(self):
engine = db_connect()
create_forum_table(engine)
self.Session = sessionmaker(bind=engine)
def process_item(self, item, spider):
session = self.Session()
forumitem = forumDB(**item)
try:
session.add(forumitem)
session.commit()
except:
session.rollback()
raise
finally:
session.close()
return item
最佳答案
引用 Operator Class 的正确方法在SQLAlchemy中(如gin_trgm_ops
)就是使用postgresql_ops
参数。这也将允许像 alembic 这样的工具。了解在自动生成迁移时如何使用它。
Index('description_idx',
'description', postgresql_using='gin',
postgresql_ops={
'description': 'gin_trgm_ops',
})
关于python - 如何使用 Scrapy 的 SQLAlchemy 创建 pg_trgm 索引?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36389166/
pg_trgm 在这两个比较中都给我 0.4 分: SELECT similarity('Noemie','Noémie'); 0.4 SELECT similarity('Noemie','NoXm
创建表: CREATE TABLE public.personal ( id bigserial NOT NULL PRIMARY KEY, first_name ch
将 pg_trgm.word_similarity_threshold 设置为 0.2;降低当前 session 的阈值但不为数据库做。我需要降低支持拼写错误的阈值。 最佳答案 赞the docume
我在玩 pg_trgm 扩展,我有点困惑。这是 session : postgres=# create table t(i int, x text); CREATE TABLE postgres=#
SELECT col1, max(date) as max_date FROM table WHERE col1 ILIKE 'name' GROUP BY col1 这里的 col1 是 varch
我有下表 id error - ---------------------------------------- 1 Error 1234eee5, can not write to disk 2
谁能给我解释一下在 Postgres pg_trgm 模块中相似度函数是如何计算的。 例如相似度('sage', 'message') = 0.3 1) " s"," sa",age,"ge ",s
我有表 Users,该列上有列 displayName (text) 和 pg_trgm gin index。 CREATE INDEX "Users-displayName-pg-trgm-inde
所以我有一个简单的场景。我有一张 field 表(事件 field 等)。我的查询看起来像: SELECT * FROM venues WHERE venues.name % 'Philips Are
这似乎是一个非常基本的问题,但我如何更改 pg_trgm 扩展的默认限制?目前是 0.3。我做了: select set_limit(0.5) select show_limit() => 0.5 关
我有一张 table item具有多个文本字段,例如 name , unique_attr , category等,所有这些我都使用 GIN (gin_trgm_ops) 索引更快地编制索引 ilik
我有我的 pg_trgm已安装模块。 pg_trgm | 1.0 | extensions | text similarity measurement and index ... 模式集是ex
从源代码成功安装 postgresql 9.2.2 后(在 OpenSUSE 11.4 上,存储库中没有此版本),我正在尝试恢复使用 pg_trgm 扩展的数据库。这会导致错误,因为找不到 pg_tr
我在一个表中有一个包含 100.000 个句子的列表,使用 pg_trgm 我可以使用 GIN/GIST 非常快速地获得与我的字符串最接近的"super cool"指数。看官方例子: https://
我正在尝试使用 Postgres 中的相似度函数来进行一些模糊文本匹配,但是每当我尝试使用它时,我都会收到错误消息: function similarity(character varying, un
我有一个 Django 应用程序和一个 Postgresql 数据库(在生产中)。现在我想为 Postgres 安装 pg_trgm 扩展。但我找不到任何从 Django 应用程序安装它的分步说明。我
我有一个 Django 应用程序和一个 Postgresql 数据库(在生产中)。现在我想为 Postgres 安装 pg_trgm 扩展。但我找不到任何从 Django 应用程序安装它的分步说明。我
这可能是一个非常愚蠢的问题。 psyco2pg 或 postgres 都不喜欢相似性运算符。这有效: sql = 'Select * from movie where title = %s' data
我的 PostgreSQL 9.3 数据库中有 3 亿个地址,我想使用 pg_trgm 来模糊搜索这些行。最终目的是实现一个类似于谷歌地图搜索的搜索功能。 当我使用pg_trgm 搜索这些地址时,大约
我定义了以下索引: CREATE INDEX users_search_idx ON auth_user USING gin( username gin_trg
我是一名优秀的程序员,十分优秀!