sqlalchemy的whoosh扩展

WhooshAlchem的Python项目详细描述


支持SqLalChany模型字段的简单文本索引。

BSD许可证。

作者Stefane Fermigier(http://www.fermigier.com/)基于 卡尔·吉尔斯特罗姆的烧瓶炼金术。

快速入门示例

导入此库:

>>> from whooshalchemy import IndexService

标准sqlalchemy导入:

>>> from sqlalchemy.ext.declarative import declarative_base
>>> from sqlalchemy.schema import Column
>>> from sqlalchemy.types import Integer, Text, DateTime
>>> from sqlalchemy.engine import create_engine
>>> from sqlalchemy.orm.session import sessionmaker

设置sqlalchemy:

>>> engine = create_engine('sqlite:///:memory:')
>>> Session = sessionmaker(bind=engine)
>>> session = Session()
>>> Base = declarative_base()

我们的型号:

>>> class BlogPost(Base):
...   __tablename__ = 'blogpost'
...   __searchable__ = ['title', 'content']  # these fields will be indexed by whoosh
...
...   id = Column(Integer, primary_key=True)
...   title = Column(Text)
...   content = Column(Text)
...
...   def __repr__(self):
...       return '{0}(title={1})'.format(self.__class__.__name__, self.title)
...
>>> Base.metadata.create_all(engine)

创建和初始化索引服务:

>>> config = {"WHOOSH_BASE": "/tmp/whoosh"}
>>> index_service = IndexService(config=config, session=session)
>>> index_service.register_class(BlogPost)
FileIndex(FileStorage('/tmp/whoosh/BlogPost'), 'MAIN')

创建博客文章:

>>> m = BlogPost(title=u'My cool title', content=u'This is the first post.')
>>> session.add(m); session.commit()

执行一些搜索:

>>> list(BlogPost.search_query(u'cool'))
[BlogPost(title=My cool title)]
>>> list(BlogPost.search_query(u'first'))
[BlogPost(title=My cool title)]

注意:响应是一个BaseQuery对象,因此可以附加其他sql操作:

>>> list(BlogPost.search_query(u'first').filter(BlogPost.id >= 0))
[BlogPost(title=My cool title)]

与烧瓶一起使用

设置烧瓶应用程序,创建db对象(db = SQLAlchemy(app)),导入模型。

WHOOSH_BASE设置为烧瓶中的whoosh索引目录,然后创建索引服务 并注册您的型号:

>>> index_service = IndexService(config=app.config)
>>> index_service.register_class(MyFirstModel)
>>> index_service.register_class(MySecondModel)

更改

版本0.3.0(2017/01/09)

  • python 3兼容性。
  • 使用pytest而不是nose进行测试

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
使用MongoDB进行java漏斗分析?   java如何重构此代码以仅执行一次方法logViolation(),并在单个字符串中获取字符串变量(speedType)的所有值   java如何将方向向量转换为角度?   Java中json文件中的股票价格   java有没有一种方法可以查看网站中的哪些资源加载了selenium?   java文件定位器可以指向不同文件服务器上的目录吗?   java GWT等待SetVisibleRange和ClearData完成   macos Java Applet无法在Mac OS下接收鼠标输入   java BottomNavigationView不支持单次单击必须单击两次   MS SQL Server 2012中的java:我的数据库名称是J.3.0.0\u DEV我无法在Oracle SQL Developer IDE中连接它?   java对JFileChooser的修改,只显示文件夹内容   java如何将动态对象查询更改为criteria builder或更好的性能   java中的swing新字体类型   java Hibernate。删除未使用的条目   上载CSV文件并将其转换为Java模型对象   java如何将信息添加到库的日志消息中?   JavaEclipseGit:使用egit从另一个分支、标记或引用打开版本   使用Firebase控制台消息的java开放视频