Sqlalchemy extension for dealing with sphinxql

sqlalchemy_sphinx的Python项目详细描述


SqlAlchemy Sphinx是SqlAlchemy的方言,它转换SqlAlchemy 将模型转换为兼容的SQL for Sphinx。

这种方言适用于python 2和3。当前需要导入 sqlalchemy_sphinx以正确注册python 3。

安装

sqlalchemy sphinx在pypi上的包名下可用 sqlalchemy-sphinx,您可以通过运行获得:

pip install sqlalchemy-sphinx

用法

定义sphinx sqlalchemy与创建 sqlalchemy模型。

fromsqlalchemyimportcreate_engine,Column,Integer,String,BigInteger,Unicode,Enumfromsqlalchemy.ext.declarativeimportdeclarative_basefromsqlalchemy.ormimportdeferred,sessionmakersphinx_engine=create_engine('sphinx://your.sphinx.host:9008')SphinxBase=declarative_base(bind=sphinx_engine)SphinxSession=sessionmaker(bind=sphinx_engine)sphinx_session=SphinxSession()classMockSphinxModel(Base):__tablename__="mock_table"name=Column(String)id=Column(Integer,primary_key=True)country=Column(String)ranker=deferred(Column(String))group_by_dummy=deferred(Column(String))max_matches=deferred(Column(String))field_weights=deferred(Column(String))

创建模型后,我们可以对模型运行查询:

query=session.query(MockSphinxModel).limit(100)# 'SELECT name, id, country FROM mock_table LIMIT 0, 100'

我们还可以进行匹配

base_query=session.query(MockSphinxModel.id)query=base_query.filter(MockSphinxModel.country.match("US"))# "SELECT id FROM mock_table WHERE MATCH('(@country US)')"query=base_query.filter(MockSphinxModel.name.match("adriel"),MockSphinxModel.country.match("US"))# "SELECT id FROM mock_table WHERE MATCH('(@name adriel) (@country US)')"

选项:

query=session.query(MockSphinxModel.id)query=query.filter(func.options(MockSphinxModel.field_weights==["title=10","body=3"]))# 'SELECT id FROM mock_table OPTION field_weights=(title=10, body=3)'query=session.query(MockSphinxModel.id)query=query.filter(MockSphinxModel.country.match("US"),func.options(MockSphinxModel.max_matches==1))# "SELECT id FROM mock_table WHERE MATCH('(@country US)') OPTION max_matches=1"

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

推荐PyPI第三方库


热门话题
java对ServiceListener和ServiceTracker调用提供了哪些排序保证?   java找不到方法格式的符号(DateTimeFormatter)?   mysql有没有一种方法可以将TCPDump输出到一个文件中,并用Java对其进行过滤,每5秒钟用新数据覆盖一次该文件?   java如何最好地配置用户上传支持文件的上传位置   java我在Android上使用OData4j,我无法获取实体   JPA实体关系简单示例中的java获取错误   JAVANoClassDefFoundError:安卓。应用程序。用法安卓中的UsageStatsManager   Eclipse中javaoo代码分析   java MethodVisitor抛出类格式错误   java为什么在从ViewModel调用时,改型排队不起作用?   调试小程序Java控制台:删除跟踪消息大小限制   java复杂安卓活动动画   java如何在使用JDOM2解析XML时忽略注释内容   java通过循环创建文本字段   即使在bufferedwriter关闭后也未发现java文件异常   单链表恢复中的java错误