对zombodb的sqlalchemy支持
sqlalchemy-zdb的Python项目详细描述
SqlAlchemy对zombodb的支持
==
**实验性**对带有SqlAlchemy的zombodb查询语言的支持。[sqla_uzdb]的硬分叉(https://github.com/xxxbobrxxx/sqlalchemy戆uzombodb)。
请查看[查询语法](https://github.com/skftn/sqlalchemy戆uzdb戆语法)以获取受支持表达式的示例。
---|---
postgres 9.5
elasticsearch 1.7.1+(不是2.0)
python 3.5+
zombodb 3.1.12
关键字varchar(64)[],
简短短语,
长描述全文,
价格bigint,
库存计数整数,
停止布尔默认值false,
可用性日期,
作者varchar(32)
;
```
sqlalchemy模型:
``python
from sqlalchemy_zdb.types import phrase,fulltext,zdb column
类产品(基):
nullable=false)
关键字=列(数组(unicode(64))
短摘要=zdbcolumn(phrase())
长描述=zdbcolumn(全文(41))
价格=zdbcolumn(bigint())
库存计数=列(integer())
终止=列(boolean(),默认值=false)
可用性日期=列(datetime())
author=zdbcolumn(unicode(32))
````
-`zdbcolumn`-显式标记zombodb索引中包含的列
-`fulltext`-zombodb特定类型
-`phrase`-zombodb特定键入
`session.metadata.create_all()`可正确创建此表。它还添加zombodb索引。
会话=会话)
q=q.filter(products.name=="foo")
q=q.filter(products.author.like("bar"))
q=q.filter(products.price.between(5,10))
q=q.filter(products.discounted==false)
results=q.all()
`````
```sql
从产品中选择[…],其中zdb('products',ctid)=>;'author:"bar"和price:5/to/10'和
products.name='foo'和products.discounted=false
````
请注意,"name"和"discounted"列都不包含在zombodb查询中,而是显示为有效的pgsql。这是因为在查询编译期间它们不是"zdbcolumn"类型。
如果决定使用此包,请仔细检查生成的SQL查询是否正确。如果出现异常行为,请提交一个问题,以便我可以查看。
'作者:"foo bar"'
```
stacking'等于'zdb column(array(string(32))'列上的条件:
``python
q=q.filter(products.keywords=="foo")
q=q.filter(products.keywords=="bar")
````
``sql
从产品中选择[…],其中zdb('products',ctid)==>;'关键字:"foo"和关键字:"bar"
``
这将匹配同时具有"foo"和"bar"关键字的行。
'price>;5'
```
``python
q=q.filter(products.price.between(5,14.5))
```
``sql
从产品中选择[…]从产品中选择[…]从产品中选择[…]从产品中选择[…]从zdb('products,ctid)==>;'price:5/到/14.5'
` `
` ` ` ` ` ` ` ` ` ` ` ` ` `从产品中选择[…]从产品中选择[…]从产品中选择[…]从产品中选择[br/>zdb('products,ctid)======================5/到/14.5/到/14.5''
` ` ` `>;"author:"foo bar"'
```
传递regex对象时,生成表达式:` column:~"foo[a-z]"`
`` python
q=q.filter(products.author.like(re.compile("foo[a-z]"))
````
``sql
从products
中选择[…],其中zdb('products',ctid)=>;"作者:~"foo[a-z]"'
```
``q=q.filter(products.author.match("foo"))
````
``sql
``select[…]from products
where zdb('products',ctid)=>;'作者:@"foo"'
```
"bar")'
```
这与名为"foo"或"bar"的两个作者都匹配。
\r/>limit
zombodb允许您限制从文本查询返回的行数,这类似于postgres的"sql-level-order-by-limit-offset"子句,但是,由于在elasticsearch和postgres之间传递的数据更少,因此效率会大大提高。
语法:
````
"limit(price asc,0,10)…"
按作者姓名asc排序;
````
要在sqlalchemy中构造这样的查询,查询对象必须接收:
1。使用"limit()"的限制
2。一个"zdbcolumn"或"zdbcore",使用"order\u by()`
示例1-使用标记为"zdbcolumn"的列(*products.price*)
``python
q=q.filter(products.author.in廑(["foo","bar"])
q=q.order廑by(products.price.desc(),
products.availability\date.desc()).limit(1)offset(1)
`````
```sql
从products
中选择[…],其中zdb('products',ctid)==>;'limit(price desc,1,1)author:("foo","bar")'
按产品订购。price desc,products.availability\date desc
``
换言之,如果以前在查询建筑中已将"limit()"与"order\by()"一起使用,并且主题列的类型为"zdbcolumn",它将尝试为它烘焙一个正确的查询。
示例2-使用sqlalchemy中的"zdbcore"zdbcore
``python
从sqlalchemy中导入zdbcore
q=q.order(zdbcore("asc"),
products.availability\u date.desc(),
products.long_description.desc())
q=q.limit(1)
q=q.offset(1)
``````
```sql
从products
中选择[…],其中zdb('products',ctid)==>;'limit('u score asc,1,1)作者:("foo","bar")'
按zdb score('products',ctid)asc订购,products.availability日期说明,products.long_u description desc
```
[zombodb文档](https://github.com/zombodb/zombodb/blob/master/syntax.md limitoffset with sorting)中的"limit"可以阅读更多内容。
可以直接使用"zdb_raw_query"。
短语查询:
from sqlalchemy_zdb import zdb_raw_query,zdbphrase
session.query(post.text)\
.filter(zdb_raw_query(post.text=='hey joe'))
从post
选择post.text作为post_text
,其中zdb('post',ctid)=>;"text:"hey joe"'
布尔查询:
pg_session.query(post.text)\
.filter(zdb_raw_query(或_u(post.text=='foo',和_u(post.text=='bar',post.text=='fuzz')))
从post
其中zdb('post',ctid)=>选择post.text作为post_text
;'(文本:"foo"或(文本:"bar"A)nd text:"fuzz")'
pg_session.query(post.text)\
.filter(zdb_raw_query(post.comments>;1))
1'
原始查询:
pg_session.query(post.text)\
.filter(zdb_raw_query(post,'text:(sports,box)或long_description:(wood w/5 away)和comments<;10'))
选择post.text作为post_text
从post
其中zdb('post',ctid)=>;'文本:(运动型,长方体)或长形描述:(木制,5英尺外)和注释<;10'
==
**实验性**对带有SqlAlchemy的zombodb查询语言的支持。[sqla_uzdb]的硬分叉(https://github.com/xxxbobrxxx/sqlalchemy戆uzombodb)。
请查看[查询语法](https://github.com/skftn/sqlalchemy戆uzdb戆语法)以获取受支持表达式的示例。
---|---
postgres 9.5
elasticsearch 1.7.1+(不是2.0)
python 3.5+
zombodb 3.1.12
关键字varchar(64)[],
简短短语,
长描述全文,
价格bigint,
库存计数整数,
停止布尔默认值false,
可用性日期,
作者varchar(32)
;
```
sqlalchemy模型:
``python
from sqlalchemy_zdb.types import phrase,fulltext,zdb column
类产品(基):
nullable=false)
关键字=列(数组(unicode(64))
短摘要=zdbcolumn(phrase())
长描述=zdbcolumn(全文(41))
价格=zdbcolumn(bigint())
库存计数=列(integer())
终止=列(boolean(),默认值=false)
可用性日期=列(datetime())
author=zdbcolumn(unicode(32))
````
-`zdbcolumn`-显式标记zombodb索引中包含的列
-`fulltext`-zombodb特定类型
-`phrase`-zombodb特定键入
`session.metadata.create_all()`可正确创建此表。它还添加zombodb索引。
会话=会话)
q=q.filter(products.name=="foo")
q=q.filter(products.author.like("bar"))
q=q.filter(products.price.between(5,10))
q=q.filter(products.discounted==false)
results=q.all()
`````
```sql
从产品中选择[…],其中zdb('products',ctid)=>;'author:"bar"和price:5/to/10'和
products.name='foo'和products.discounted=false
````
请注意,"name"和"discounted"列都不包含在zombodb查询中,而是显示为有效的pgsql。这是因为在查询编译期间它们不是"zdbcolumn"类型。
如果决定使用此包,请仔细检查生成的SQL查询是否正确。如果出现异常行为,请提交一个问题,以便我可以查看。
'作者:"foo bar"'
```
stacking'等于'zdb column(array(string(32))'列上的条件:
``python
q=q.filter(products.keywords=="foo")
q=q.filter(products.keywords=="bar")
````
``sql
从产品中选择[…],其中zdb('products',ctid)==>;'关键字:"foo"和关键字:"bar"
``
这将匹配同时具有"foo"和"bar"关键字的行。
'price>;5'
```
``python
q=q.filter(products.price.between(5,14.5))
```
``sql
从产品中选择[…]从产品中选择[…]从产品中选择[…]从产品中选择[…]从zdb('products,ctid)==>;'price:5/到/14.5'
` `
` ` ` ` ` ` ` ` ` ` ` ` ` `从产品中选择[…]从产品中选择[…]从产品中选择[…]从产品中选择[br/>zdb('products,ctid)======================5/到/14.5/到/14.5''
` ` ` `>;"author:"foo bar"'
```
传递regex对象时,生成表达式:` column:~"foo[a-z]"`
`` python
q=q.filter(products.author.like(re.compile("foo[a-z]"))
````
``sql
从products
中选择[…],其中zdb('products',ctid)=>;"作者:~"foo[a-z]"'
```
``q=q.filter(products.author.match("foo"))
````
``sql
``select[…]from products
where zdb('products',ctid)=>;'作者:@"foo"'
```
"bar")'
```
这与名为"foo"或"bar"的两个作者都匹配。
\r/>limit
zombodb允许您限制从文本查询返回的行数,这类似于postgres的"sql-level-order-by-limit-offset"子句,但是,由于在elasticsearch和postgres之间传递的数据更少,因此效率会大大提高。
语法:
````
"limit(price asc,0,10)…"
按作者姓名asc排序;
````
要在sqlalchemy中构造这样的查询,查询对象必须接收:
1。使用"limit()"的限制
2。一个"zdbcolumn"或"zdbcore",使用"order\u by()`
示例1-使用标记为"zdbcolumn"的列(*products.price*)
``python
q=q.filter(products.author.in廑(["foo","bar"])
q=q.order廑by(products.price.desc(),
products.availability\date.desc()).limit(1)offset(1)
`````
```sql
从products
中选择[…],其中zdb('products',ctid)==>;'limit(price desc,1,1)author:("foo","bar")'
按产品订购。price desc,products.availability\date desc
``
换言之,如果以前在查询建筑中已将"limit()"与"order\by()"一起使用,并且主题列的类型为"zdbcolumn",它将尝试为它烘焙一个正确的查询。
示例2-使用sqlalchemy中的"zdbcore"zdbcore
``python
从sqlalchemy中导入zdbcore
q=q.order(zdbcore("asc"),
products.availability\u date.desc(),
products.long_description.desc())
q=q.limit(1)
q=q.offset(1)
``````
```sql
从products
中选择[…],其中zdb('products',ctid)==>;'limit('u score asc,1,1)作者:("foo","bar")'
按zdb score('products',ctid)asc订购,products.availability日期说明,products.long_u description desc
```
[zombodb文档](https://github.com/zombodb/zombodb/blob/master/syntax.md limitoffset with sorting)中的"limit"可以阅读更多内容。
可以直接使用"zdb_raw_query"。
短语查询:
from sqlalchemy_zdb import zdb_raw_query,zdbphrase
session.query(post.text)\
.filter(zdb_raw_query(post.text=='hey joe'))
从post
选择post.text作为post_text
,其中zdb('post',ctid)=>;"text:"hey joe"'
布尔查询:
pg_session.query(post.text)\
.filter(zdb_raw_query(或_u(post.text=='foo',和_u(post.text=='bar',post.text=='fuzz')))
从post
其中zdb('post',ctid)=>选择post.text作为post_text
;'(文本:"foo"或(文本:"bar"A)nd text:"fuzz")'
pg_session.query(post.text)\
.filter(zdb_raw_query(post.comments>;1))
1'
原始查询:
pg_session.query(post.text)\
.filter(zdb_raw_query(post,'text:(sports,box)或long_description:(wood w/5 away)和comments<;10'))
选择post.text作为post_text
从post
其中zdb('post',ctid)=>;'文本:(运动型,长方体)或长形描述:(木制,5英尺外)和注释<;10'