Skip to content

Commit 96c1153

Browse files
authored
Add where clause support to select (#40)
1 parent 14799e6 commit 96c1153

11 files changed

+157
-106
lines changed

docs/index.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@
9797

9898
## 互动
9999

100-
[TG / Discord](https://wu-clan.github.io/homepage/)
100+
[Discord](https://wu-clan.github.io/homepage/)
101101

102102
## 赞助
103103

docs/usage/count.md

+6-8
Original file line numberDiff line numberDiff line change
@@ -23,21 +23,19 @@ class CRUDIns(CRUDPlus[ModelIns]):
2323
async def count(
2424
self,
2525
session: AsyncSession,
26-
filters: ColumnElement | list[ColumnElement] | None = None,
26+
*whereclause: ColumnExpressionArgument[bool],
2727
**kwargs,
2828
) -> int:
2929
```
3030

3131
**Parameters:**
3232

33-
| Name | Type | Description | Default |
34-
|---------|----------------------------------------------------|------------------|---------|
35-
| session | AsyncSession | 数据库会话 | 必填 |
36-
| filters | `ColumnElement `\|` list[ColumnElement] `\|` None` | 要应用于查询的 WHERE 子句 | `None` |
33+
| Name | Type | Description | Default |
34+
|--------------|----------------------------------|------------------------------------------------------------------------------------------------------|---------|
35+
| session | AsyncSession | 数据库会话 | 必填 |
36+
| *whereclause | `ColumnExpressionArgument[bool]` | 等同于 [SQLAlchemy where](https://docs.sqlalchemy.org/en/20/tutorial/data_select.html#the-where-clause) | |
37+
| **kwargs | | [条件过滤](../advanced/filter.md),将创建条件查询 SQL | |
3738

38-
!!! note "**kwargs"
39-
40-
[条件过滤](../advanced/filter.md),将创建条件查询 SQL
4139

4240
**Returns:**
4341

docs/usage/exists.md

+6-8
Original file line numberDiff line numberDiff line change
@@ -23,21 +23,19 @@ class CRUDIns(CRUDPlus[ModelIns]):
2323
async def exists(
2424
self,
2525
session: AsyncSession,
26-
filters: ColumnElement | list[ColumnElement] | None = None,
26+
*whereclause: ColumnExpressionArgument[bool],
2727
**kwargs,
2828
) -> bool:
2929
```
3030

3131
**Parameters:**
3232

33-
| Name | Type | Description | Default |
34-
|---------|----------------------------------------------------|------------------|---------|
35-
| session | AsyncSession | 数据库会话 | 必填 |
36-
| filters | `ColumnElement `\|` list[ColumnElement] `\|` None` | 要应用于查询的 WHERE 子句 | `None` |
33+
| Name | Type | Description | Default |
34+
|--------------|----------------------------------|------------------------------------------------------------------------------------------------------|---------|
35+
| session | AsyncSession | 数据库会话 | 必填 |
36+
| *whereclause | `ColumnExpressionArgument[bool]` | 等同于 [SQLAlchemy where](https://docs.sqlalchemy.org/en/20/tutorial/data_select.html#the-where-clause) | |
37+
| **kwargs | | [条件过滤](../advanced/filter.md),将创建条件查询 SQL | |
3738

38-
!!! note "**kwargs"
39-
40-
[条件过滤](../advanced/filter.md),将创建条件查询 SQL
4139

4240
**Returns:**
4341

docs/usage/select.md

+7-3
Original file line numberDiff line numberDiff line change
@@ -50,16 +50,20 @@ async def get_users(
5050
## API
5151

5252
```py
53-
async def select(self, **kwargs) -> Select:
53+
async def select(self, *whereclause: ColumnExpressionArgument[bool], **kwargs) -> Select:
5454
...
5555
```
5656

5757
此方法用于构造 SQLAlchemy
5858
Select,在一些特定场景将会很有用,例如,配合 [fastapi-pagination](https://github.com/uriyyo/fastapi-pagination) 使用
5959

60-
!!! note "**kwargs"
60+
**Parameters:**
6161

62-
[条件过滤](../advanced/filter.md),将创建条件查询 SQL
62+
| Name | Type | Description | Default |
63+
|--------------|----------------------------------|------------------------------------------------------------------------------------------------------|---------|
64+
| session | AsyncSession | 数据库会话 | 必填 |
65+
| *whereclause | `ColumnExpressionArgument[bool]` | 等同于 [SQLAlchemy where](https://docs.sqlalchemy.org/en/20/tutorial/data_select.html#the-where-clause) | |
66+
| **kwargs | | [条件过滤](../advanced/filter.md),将创建条件查询 SQL | |
6367

6468
**Returns:**
6569

docs/usage/select_model.md

+11-5
Original file line numberDiff line numberDiff line change
@@ -21,15 +21,21 @@ class CRUDIns(CRUDPlus[ModelIns]):
2121
## API
2222

2323
```py
24-
async def select_model(self, session: AsyncSession, pk: int) -> Model | None:
24+
async def select_model(
25+
self,
26+
session: AsyncSession,
27+
pk: int,
28+
*whereclause: ColumnExpressionArgument[bool],
29+
) -> Model | None:
2530
```
2631

2732
**Parameters:**
2833

29-
| Name | Type | Description | Default |
30-
|---------|--------------|----------------------------------|---------|
31-
| session | AsyncSession | 数据库会话 | 必填 |
32-
| pk | int | [主键](../advanced/primary_key.md) | 必填 |
34+
| Name | Type | Description | Default |
35+
|--------------|----------------------------------|------------------------------------------------------------------------------------------------------|---------|
36+
| session | AsyncSession | 数据库会话 | 必填 |
37+
| pk | int | [主键](../advanced/primary_key.md) | 必填 |
38+
| *whereclause | `ColumnExpressionArgument[bool]` | 等同于 [SQLAlchemy where](https://docs.sqlalchemy.org/en/20/tutorial/data_select.html#the-where-clause) | |
3339

3440
**Returns:**
3541

docs/usage/select_model_by_column.md

+11-8
Original file line numberDiff line numberDiff line change
@@ -20,18 +20,21 @@ class CRUDIns(CRUDPlus[ModelIns]):
2020
## API
2121

2222
```py
23-
async def select_model_by_column(self, session: AsyncSession, **kwargs) -> Model | None:
23+
async def select_model_by_column(
24+
self,
25+
session: AsyncSession,
26+
*whereclause: ColumnExpressionArgument[bool],
27+
**kwargs,
28+
) -> Model | None:
2429
```
2530

2631
**Parameters:**
2732

28-
| Name | Type | Description | Default |
29-
|---------|--------------|----------------------------------|---------|
30-
| session | AsyncSession | 数据库会话 | 必填 |
31-
32-
!!! note "**kwargs"
33-
34-
[条件过滤](../advanced/filter.md),将创建条件查询 SQL
33+
| Name | Type | Description | Default |
34+
|--------------|----------------------------------|------------------------------------------------------------------------------------------------------|---------|
35+
| session | AsyncSession | 数据库会话 | 必填 |
36+
| *whereclause | `ColumnExpressionArgument[bool]` | 等同于 [SQLAlchemy where](https://docs.sqlalchemy.org/en/20/tutorial/data_select.html#the-where-clause) | |
37+
| **kwargs | | [条件过滤](../advanced/filter.md),将创建条件查询 SQL | |
3538

3639
**Returns:**
3740

docs/usage/select_models.md

+11-8
Original file line numberDiff line numberDiff line change
@@ -22,18 +22,21 @@ class CRUDIns(CRUDPlus[ModelIns]):
2222
## API
2323

2424
```py
25-
async def select_models(self, session: AsyncSession, **kwargs) -> Sequence[Row[Any] | RowMapping | Any]:
25+
async def select_models(
26+
self,
27+
session: AsyncSession,
28+
*whereclause: ColumnExpressionArgument[bool],
29+
**kwargs,
30+
) -> Sequence[Row[Any] | RowMapping | Any]:
2631
```
2732

2833
**Parameters:**
2934

30-
| Name | Type | Description | Default |
31-
|---------|--------------|----------------------------------|---------|
32-
| session | AsyncSession | 数据库会话 | 必填 |
33-
34-
!!! note "**kwargs"
35-
36-
[条件过滤](../advanced/filter.md),将创建条件查询 SQL
35+
| Name | Type | Description | Default |
36+
|--------------|----------------------------------|------------------------------------------------------------------------------------------------------|---------|
37+
| session | AsyncSession | 数据库会话 | 必填 |
38+
| *whereclause | `ColumnExpressionArgument[bool]` | 等同于 [SQLAlchemy where](https://docs.sqlalchemy.org/en/20/tutorial/data_select.html#the-where-clause) | |
39+
| **kwargs | | [条件过滤](../advanced/filter.md),将创建条件查询 SQL | |
3740

3841
**Returns:**
3942

docs/usage/select_models_order.md

+18-19
Original file line numberDiff line numberDiff line change
@@ -10,38 +10,37 @@ from sqlalchemy.ext.asyncio import AsyncSession
1010

1111

1212
class ModelIns(Base):
13-
# your sqlalchemy model
14-
pass
13+
# your sqlalchemy model
14+
pass
1515

1616

1717
class CRUDIns(CRUDPlus[ModelIns]):
18-
async def create(self, db: AsyncSession) -> Sequence[ModelIns]:
19-
return await self.select_models_order(db, sort_columns=['name', 'age'], sort_orders=['asc', 'desc'])
18+
async def create(self, db: AsyncSession) -> Sequence[ModelIns]:
19+
return await self.select_models_order(db, sort_columns=['name', 'age'], sort_orders=['asc', 'desc'])
2020
```
2121

2222
## API
2323

2424
```py
25-
async def select_models_order(
26-
self,
27-
session: AsyncSession,
28-
sort_columns: str | list[str],
29-
sort_orders: str | list[str] | None = None,
30-
**kwargs,
25+
async def select_models_order(
26+
self,
27+
session: AsyncSession,
28+
sort_columns: str | list[str],
29+
sort_orders: str | list[str] | None = None,
30+
*whereclause: ColumnExpressionArgument[bool],
31+
**kwargs,
3132
) -> Sequence[Row | RowMapping | Any] | None:
3233
```
3334

3435
**Parameters:**
3536

36-
| Name | Type | Description | Default |
37-
|--------------|--------------------------------|------------------------------------------------------------------------|---------|
38-
| session | AsyncSession | 数据库会话 | 必填 |
39-
| sort_columns | `str `\|` list[str]` | 应用排序的单个列名或列名列表 | 必填 |
40-
| sort_orders | `str `\|` list[str] `\|` None` | 单个排序顺序(asc 或 desc)或与 sort_columns 中的列相对应的排序顺序列表。 如果未提供,则默认每列的排序顺序为 asc | `None` |
41-
42-
!!! note "**kwargs"
43-
44-
[条件过滤](../advanced/filter.md),将创建条件查询 SQL
37+
| Name | Type | Description | Default |
38+
|--------------|----------------------------------|------------------------------------------------------------------------------------------------------|---------|
39+
| session | AsyncSession | 数据库会话 | 必填 |
40+
| sort_columns | `str `\|` list[str]` | 应用排序的单个列名或列名列表 | 必填 |
41+
| sort_orders | `str `\|` list[str] `\|` None` | 单个排序顺序(asc 或 desc)或与 sort_columns 中的列相对应的排序顺序列表。 如果未提供,则默认每列的排序顺序为 asc | `None` |
42+
| *whereclause | `ColumnExpressionArgument[bool]` | 等同于 [SQLAlchemy where](https://docs.sqlalchemy.org/en/20/tutorial/data_select.html#the-where-clause) | |
43+
| **kwargs | | [条件过滤](../advanced/filter.md),将创建条件查询 SQL | |
4544

4645
**Returns:**
4746

docs/usage/select_order.md

+7-8
Original file line numberDiff line numberDiff line change
@@ -5,20 +5,19 @@ async def select_order(
55
self,
66
sort_columns: str | list[str],
77
sort_orders: str | list[str] | None = None,
8+
*whereclause: ColumnExpressionArgument[bool],
89
**kwargs,
910
) -> Select:
1011
```
1112

1213
**Parameters:**
1314

14-
| Name | Type | Description | Default |
15-
|--------------|--------------------------------|------------------------------------------------------------------------|---------|
16-
| sort_columns | `str `\|` list[str]` | 应用排序的单个列名或列名列表 | 必填 |
17-
| sort_orders | `str `\|` list[str] `\|` None` | 单个排序顺序(asc 或 desc)或与 sort_columns 中的列相对应的排序顺序列表。 如果未提供,则默认每列的排序顺序为 asc | `None` |
18-
19-
!!! note "**kwargs"
20-
21-
[条件过滤](../advanced/filter.md),将创建条件查询 SQL
15+
| Name | Type | Description | Default |
16+
|--------------|----------------------------------|------------------------------------------------------------------------------------------------------|---------|
17+
| sort_columns | `str `\|` list[str]` | 应用排序的单个列名或列名列表 | 必填 |
18+
| sort_orders | `str `\|` list[str] `\|` None` | 单个排序顺序(asc 或 desc)或与 sort_columns 中的列相对应的排序顺序列表。 如果未提供,则默认每列的排序顺序为 asc | `None` |
19+
| *whereclause | `ColumnExpressionArgument[bool]` | 等同于 [SQLAlchemy where](https://docs.sqlalchemy.org/en/20/tutorial/data_select.html#the-where-clause) | |
20+
| **kwargs | | [条件过滤](../advanced/filter.md),将创建条件查询 SQL | |
2221

2322
**Returns:**
2423

0 commit comments

Comments
 (0)