私はScrapyを使用してWebフォーラムからデータをスクラップしています。 SQLAlchemyを使用してこのデータをPostgreSQLデータベースに保存しています。しかし、テーブルとカラムはうまく作成されますが、SQLAlchemyにカラムの1つにインデックスを作成させることはできません。私はginを使ってtrigramインデックス(pg_trgm)を作成しようとしています。SQLAlchemyを使用してScrapy用に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')
私は私のモデルに次の行を追加しました.pyしかし、postgresqlをチェックインすると、インデックスは決して作成されませんでした。
以下は私の完全なmodels.pyとpipelines.pyファイルです。私はこれについて間違っているのですか?
ご協力いただければ幸いです!
models.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')
pipelines.py
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
ありがとうございます!それは完璧に働いた! –