Web forumundaki verileri kazıyarak Scrapy kullanıyorum. Bu verileri SQLAlchemy kullanarak bir PostgreSQL veritabanında saklıyorum. Tablo ve sütunlar iyi oluşturulur, ancak SQLAlchemy'nin sütunlardan birinde bir dizin oluşturmasını sağlayamıyorum. Cin kullanarak bir trigram indeksi (pg_trgm) oluşturmaya çalışıyorum.Scrub için SQLAlchemy kullanarak pg_trgm dizini nasıl oluşturulur?
bu indeks yaratacak Postgresql kodudur:
CREATE INDEX description_idx ON table USING gin (description gin_trgm_ops);
benim models.py dosyasına eklemiş SQLAlchemy kodudur:
desc_idx = Index('description_idx', text("description gin_trgm_ops"), postgresql_using='gin')
benim modellerine bu çizgiyi eklemiş .py ama postgresql'de kontrol ettiğimde indeks hiç oluşturulmadı.
Aşağıda, tam models.py ve pipelines.py dosyalarım var. Bu kadarı yanlış mı yapıyorum?
Herhangi bir yardım büyük ölçüde takdir edilecektir!
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
Teşekkür ederiz! Bu mükemmel çalıştı! –