Django的通用表表达式(CTE)
django-cte的Python项目详细描述
#django的通用表表达式(cte)
[![构建状态](https://travis ci.org/dimagi/django cte.png)(https://travis ci.org/dimagi/django cte)
[![PYPI版本](https://badge.fury.io/py/django-cte.svg)(https://badge.fury.io/py/django-cte)
`` ` `
pip install django-cte
` `
`
` `
` ` `
` ` `/>
` ` `使用
` `//` ` ` `使用“with”构造。自定义的“ctemanager”用于将cte添加到最终查询中。
``py
on_delete=cascade)
amount=integerfield(默认值=0)
cte=with(
order.objects
.values(“region_id”)
.annotate(total=sum(“amount”)
orders=(
cte.join(order,region=cte.col.region_id)
。使用_cte(cte)
。注释(region_total=cte.col.total)
.order_by(“amount”)
)
`````
此查询返回的订单将具有一个“region_total”属性,该属性包含订单区域中所有订单金额的总和。
表达式
递归CTE查询可以使用“with.recursive”构造。
```py
类区域(模型):
对象=CTemanager()
名称=文本字段(主关键字=真)
父对象=外键(“self”,空值=真,在删除=级联)
def make_regions_cte(CTE):
返回区域.objects.filter(
#从根节点开始
父节点isnull=true
。值(
“name”,
路径=f(“name”),
深度=value(0,输出字段=integerfield(),
)。并集(
递归并集:获取子节点
cte.join(region,parent=cte.col.name)。值(
“name”,
path=concat(
cte.col.path,value(“\x01”),f(“name”),
output_field=textfield(),
depth=cte.col.depth+value(1,output_field=integerfield(),
),
all=true,
region=(
>cte.join(region,name=cte.col.col.col.name)
region=(
>cte.join(region,region,name=cte.col.col.col.name)
将具有“path”和“depth”`属性。
结果将按“path”排序(按区域名分层)。在本例中,
`path`是一个以根
区域开始的“'\x01'`”分隔的区域名字符串。
有关更高级的示例,请参见[tests](./tests)。
flake8
notests
flake8--config=setup.cfg
`````
`````上传到pypi
package并上传生成的文件。
`````
pip install-r pkg需要.txt
python setup.py sdist bdist`` u wheel
wine upload dist/*
```
[![构建状态](https://travis ci.org/dimagi/django cte.png)(https://travis ci.org/dimagi/django cte)
[![PYPI版本](https://badge.fury.io/py/django-cte.svg)(https://badge.fury.io/py/django-cte)
`` ` `
pip install django-cte
` `
`
` `
` ` `
` ` `/>
` ` `使用
` `//` ` ` `使用“with”构造。自定义的“ctemanager”用于将cte添加到最终查询中。
``py
on_delete=cascade)
amount=integerfield(默认值=0)
cte=with(
order.objects
.values(“region_id”)
.annotate(total=sum(“amount”)
orders=(
cte.join(order,region=cte.col.region_id)
。使用_cte(cte)
。注释(region_total=cte.col.total)
.order_by(“amount”)
)
`````
此查询返回的订单将具有一个“region_total”属性,该属性包含订单区域中所有订单金额的总和。
表达式
递归CTE查询可以使用“with.recursive”构造。
```py
类区域(模型):
对象=CTemanager()
名称=文本字段(主关键字=真)
父对象=外键(“self”,空值=真,在删除=级联)
def make_regions_cte(CTE):
返回区域.objects.filter(
#从根节点开始
父节点isnull=true
。值(
“name”,
路径=f(“name”),
深度=value(0,输出字段=integerfield(),
)。并集(
递归并集:获取子节点
cte.join(region,parent=cte.col.name)。值(
“name”,
path=concat(
cte.col.path,value(“\x01”),f(“name”),
output_field=textfield(),
depth=cte.col.depth+value(1,output_field=integerfield(),
),
all=true,
region=(
>cte.join(region,name=cte.col.col.col.name)
region=(
>cte.join(region,region,name=cte.col.col.col.name)
将具有“path”和“depth”`属性。
结果将按“path”排序(按区域名分层)。在本例中,
`path`是一个以根
区域开始的“'\x01'`”分隔的区域名字符串。
有关更高级的示例,请参见[tests](./tests)。
flake8
notests
flake8--config=setup.cfg
`````
`````上传到pypi
package并上传生成的文件。
`````
pip install-r pkg需要.txt
python setup.py sdist bdist`` u wheel
wine upload dist/*
```