sqlmodel-ext 0.3.3__tar.gz → 0.3.4__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/PKG-INFO +1 -1
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/index.md +9 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/reference/field-types.md +3 -1
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/tutorials/01-getting-started.md +1 -1
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/tutorials/index.md +1 -1
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/index.md +9 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/reference/field-types.md +3 -1
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/tutorials/01-getting-started.md +1 -1
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/tutorials/index.md +1 -1
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/pyproject.toml +1 -1
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/src/sqlmodel_ext/__init__.py +3 -1
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/tests/test_smoke_imports.py +27 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/uv.lock +1 -1
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/.github/workflows/ci.yml +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/.gitignore +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/LICENSE +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/README.md +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/README_zh.md +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/.vitepress/config.mts +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/.vitepress/en.mts +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/.vitepress/theme/index.ts +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/.vitepress/theme/style/custom.css +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/.vitepress/zh.mts +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/explanation/cached-table.md +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/explanation/cascade-delete-semantics.md +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/explanation/crud-pipeline.md +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/explanation/index.md +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/explanation/metaclass.md +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/explanation/optimistic-lock.md +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/explanation/polymorphic-internals.md +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/explanation/prerequisites.md +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/explanation/relation-load-checker.md +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/explanation/relation-preload.md +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/guide/cached-table.md +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/guide/crud.md +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/guide/field-types.md +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/guide/index.md +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/guide/optimistic-lock.md +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/guide/pagination.md +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/guide/polymorphic.md +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/guide/relation-load-checker.md +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/guide/relation-preload.md +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/how-to/cache-queries.md +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/how-to/configure-cascade-delete.md +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/how-to/define-jti-models.md +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/how-to/define-sti-models.md +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/how-to/handle-concurrent-updates.md +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/how-to/index.md +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/how-to/integrate-with-fastapi.md +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/how-to/paginate-a-list-endpoint.md +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/how-to/prevent-missing-greenlet.md +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/how-to/release-connection-during-long-io.md +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/internals/cached-table.md +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/internals/crud.md +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/internals/index.md +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/internals/metaclass.md +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/internals/optimistic-lock.md +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/internals/polymorphic.md +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/internals/prerequisites.md +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/internals/relation-load-checker.md +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/internals/relation-preload.md +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/reference/base-classes.md +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/reference/crud-methods.md +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/reference/decorators.md +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/reference/index.md +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/reference/mixins.md +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/reference/pagination-types.md +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/tutorials/02-building-a-blog-api.md +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/tutorials/03-adding-redis-cache.md +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/explanation/cached-table.md +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/explanation/cascade-delete-semantics.md +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/explanation/crud-pipeline.md +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/explanation/index.md +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/explanation/metaclass.md +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/explanation/optimistic-lock.md +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/explanation/polymorphic-internals.md +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/explanation/prerequisites.md +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/explanation/relation-load-checker.md +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/explanation/relation-preload.md +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/guide/cached-table.md +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/guide/crud.md +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/guide/field-types.md +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/guide/index.md +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/guide/optimistic-lock.md +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/guide/pagination.md +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/guide/polymorphic.md +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/guide/relation-load-checker.md +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/guide/relation-preload.md +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/how-to/cache-queries.md +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/how-to/configure-cascade-delete.md +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/how-to/define-jti-models.md +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/how-to/define-sti-models.md +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/how-to/handle-concurrent-updates.md +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/how-to/index.md +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/how-to/integrate-with-fastapi.md +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/how-to/paginate-a-list-endpoint.md +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/how-to/prevent-missing-greenlet.md +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/how-to/release-connection-during-long-io.md +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/internals/cached-table.md +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/internals/crud.md +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/internals/index.md +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/internals/metaclass.md +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/internals/optimistic-lock.md +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/internals/polymorphic.md +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/internals/prerequisites.md +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/internals/relation-load-checker.md +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/internals/relation-preload.md +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/reference/base-classes.md +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/reference/crud-methods.md +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/reference/decorators.md +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/reference/index.md +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/reference/mixins.md +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/reference/pagination-types.md +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/tutorials/02-building-a-blog-api.md +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/tutorials/03-adding-redis-cache.md +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/examples/consumer_integration/run.py +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/package.json +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/pnpm-lock.yaml +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/src/sqlmodel_ext/_compat.py +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/src/sqlmodel_ext/_exceptions.py +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/src/sqlmodel_ext/_sa_type.py +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/src/sqlmodel_ext/_utils.py +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/src/sqlmodel_ext/base.py +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/src/sqlmodel_ext/field_types/__init__.py +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/src/sqlmodel_ext/field_types/_internal/__init__.py +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/src/sqlmodel_ext/field_types/_internal/path.py +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/src/sqlmodel_ext/field_types/_ssrf.py +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/src/sqlmodel_ext/field_types/dialects/__init__.py +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/src/sqlmodel_ext/field_types/dialects/postgresql/__init__.py +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/src/sqlmodel_ext/field_types/dialects/postgresql/array.py +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/src/sqlmodel_ext/field_types/dialects/postgresql/exceptions.py +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/src/sqlmodel_ext/field_types/dialects/postgresql/jsonb_types.py +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/src/sqlmodel_ext/field_types/dialects/postgresql/numpy_vector.py +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/src/sqlmodel_ext/field_types/ip_address.py +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/src/sqlmodel_ext/field_types/mixins/__init__.py +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/src/sqlmodel_ext/field_types/mixins/module_name_mixin.py +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/src/sqlmodel_ext/field_types/url.py +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/src/sqlmodel_ext/mixins/__init__.py +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/src/sqlmodel_ext/mixins/cached_table.py +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/src/sqlmodel_ext/mixins/info_response.py +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/src/sqlmodel_ext/mixins/optimistic_lock.py +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/src/sqlmodel_ext/mixins/polymorphic.py +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/src/sqlmodel_ext/mixins/relation_preload.py +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/src/sqlmodel_ext/mixins/table.py +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/src/sqlmodel_ext/pagination.py +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/src/sqlmodel_ext/relation_load_checker.py +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/tests/__init__.py +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/tests/_models.py +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/tests/conftest.py +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/tests/test_annotated_default_factory_inheritance.py +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/tests/test_basic_crud.py +0 -0
- {sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/tests/test_sti_default_isolation.py +0 -0
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: sqlmodel-ext
|
|
3
|
-
Version: 0.3.
|
|
3
|
+
Version: 0.3.4
|
|
4
4
|
Summary: Extended SQLModel infrastructure: smart metaclass, async CRUD mixins, polymorphic inheritance, optimistic locking, relation preloading, and reusable field types.
|
|
5
5
|
Project-URL: Homepage, https://github.com/Foxerine/sqlmodel-ext
|
|
6
6
|
Project-URL: Repository, https://github.com/Foxerine/sqlmodel-ext
|
|
@@ -34,3 +34,12 @@ features:
|
|
|
34
34
|
- title: Safe & Reliable
|
|
35
35
|
details: Optimistic locking for concurrency control, @requires_relations to prevent MissingGreenlet, and AST static analysis at startup
|
|
36
36
|
---
|
|
37
|
+
|
|
38
|
+
## Design orientation
|
|
39
|
+
|
|
40
|
+
sqlmodel-ext is not a new ORM. It is a set of **opt-in Mixins** layered on top of SQLModel / Pydantic v2 / SQLAlchemy 2.0. The library only introduces two kinds of machinery:
|
|
41
|
+
|
|
42
|
+
- **Metaclass enhancements** — automatic SQLAlchemy column setup driven by `Annotated` type hints, `mapper_args` merging, on-demand `*UpdateRequest` DTO generation, attribute-docstring inheritance, and a Python 3.14 (PEP 649) compatibility patch.
|
|
43
|
+
- **Composable Mixins** — `TableBaseMixin` (async CRUD), `PolymorphicBaseMixin` (JTI/STI), `OptimisticLockMixin` (version-column concurrency), `RelationPreloadMixin` (eager loading), `CachedTableBaseMixin` (Redis two-tier cache). Each Mixin stands alone and has no hard dependency on the others.
|
|
44
|
+
|
|
45
|
+
The underlying `Session`, `select()`, query construction, and migration tooling remain native SQLAlchemy — there is no custom DSL, and the library does not take over `engine` / `session` lifecycle. In practice that means you can drop a single Mixin into an existing SQLModel/SQLAlchemy project without rewriting your data-access layer.
|
|
@@ -33,7 +33,7 @@ from sqlmodel_ext import Str16, Str24, Str32, Str36, Str48, Str64, Str100, Str12
|
|
|
33
33
|
## Text constraints
|
|
34
34
|
|
|
35
35
|
```python
|
|
36
|
-
from sqlmodel_ext import Text1K, Text1024, Text2K, Text2500, Text3K, Text5K, Text10K, Text32K, Text60K, Text64K, Text100K, Text1M
|
|
36
|
+
from sqlmodel_ext import Text1K, Text1024, Text2K, Text2500, Text3K, Text5K, Text10K, Text16K, Text32K, Text60K, Text64K, Text100K, Text128K, Text1M
|
|
37
37
|
```
|
|
38
38
|
|
|
39
39
|
| Type | `max_length` |
|
|
@@ -45,10 +45,12 @@ from sqlmodel_ext import Text1K, Text1024, Text2K, Text2500, Text3K, Text5K, Tex
|
|
|
45
45
|
| `Text3K` | 3000 |
|
|
46
46
|
| `Text5K` | 5000 |
|
|
47
47
|
| `Text10K` | 10000 |
|
|
48
|
+
| `Text16K` | 16000 |
|
|
48
49
|
| `Text32K` | 32000 |
|
|
49
50
|
| `Text60K` | 60000 |
|
|
50
51
|
| `Text64K` | 65536 |
|
|
51
52
|
| `Text100K` | 100000 |
|
|
53
|
+
| `Text128K` | 131072 (= 128 × 1024) |
|
|
52
54
|
| `Text1M` | 1000000 |
|
|
53
55
|
|
|
54
56
|
## Numeric constraints
|
|
@@ -8,7 +8,7 @@ This is your first conversation with sqlmodel-ext. In 15 minutes you'll have:
|
|
|
8
8
|
- A clear mental model for "model + Mixin = table"
|
|
9
9
|
|
|
10
10
|
::: tip You don't need prior SQLAlchemy or SQLModel experience
|
|
11
|
-
This tutorial introduces those concepts on demand. You only need Python 3.
|
|
11
|
+
This tutorial introduces those concepts on demand. You only need Python 3.12+ and basic `async` / `await` knowledge. If you've never touched an ORM, skim [Prerequisites](/en/explanation/prerequisites) first.
|
|
12
12
|
:::
|
|
13
13
|
|
|
14
14
|
## 0. Set up the environment
|
|
@@ -25,7 +25,7 @@ Tutorials don't **exhaustively cover the API**. If a feature you need is missing
|
|
|
25
25
|
|
|
26
26
|
All tutorials assume you know:
|
|
27
27
|
|
|
28
|
-
- Python 3.
|
|
28
|
+
- Python 3.12+ (3.12 / 3.13 / 3.14 are all exercised in CI)
|
|
29
29
|
- Basic `async` / `await` syntax
|
|
30
30
|
- What SELECT / INSERT / UPDATE / DELETE do in SQL
|
|
31
31
|
|
|
@@ -34,3 +34,12 @@ features:
|
|
|
34
34
|
- title: 安全与可靠
|
|
35
35
|
details: 乐观锁并发控制、@requires_relations 防止 MissingGreenlet、启动时 AST 静态分析
|
|
36
36
|
---
|
|
37
|
+
|
|
38
|
+
## 设计取向
|
|
39
|
+
|
|
40
|
+
sqlmodel-ext 不是新的 ORM,而是构建在 SQLModel / Pydantic v2 / SQLAlchemy 2.0 之上的一组**可单独取用的 Mixin**。库本身只引入两类东西:
|
|
41
|
+
|
|
42
|
+
- **元类增强**——根据 `Annotated` 类型注解自动设置 SQLAlchemy 列、合并 `mapper_args`、按需生成 `*UpdateRequest` DTO、保留属性 docstring,并打上 Python 3.14 (PEP 649) 兼容补丁。
|
|
43
|
+
- **可插拔 Mixin**——`TableBaseMixin`(异步 CRUD)、`PolymorphicBaseMixin`(JTI/STI)、`OptimisticLockMixin`(版本号并发)、`RelationPreloadMixin`(关系预加载)、`CachedTableBaseMixin`(Redis 双层缓存)。每个 Mixin 都可以独立使用,不互相依赖。
|
|
44
|
+
|
|
45
|
+
底层 `Session`、`select()`、查询构造、迁移工具仍是原生 SQLAlchemy,没有自创 DSL,也不接管 `engine`/`session` 的生命周期。换句话说:在已有 SQLModel/SQLAlchemy 项目里,可以单独引入需要的 Mixin,而不必重写既有数据访问层。
|
|
@@ -33,7 +33,7 @@ from sqlmodel_ext import Str16, Str24, Str32, Str36, Str48, Str64, Str100, Str12
|
|
|
33
33
|
## 文本约束
|
|
34
34
|
|
|
35
35
|
```python
|
|
36
|
-
from sqlmodel_ext import Text1K, Text1024, Text2K, Text2500, Text3K, Text5K, Text10K, Text32K, Text60K, Text64K, Text100K, Text1M
|
|
36
|
+
from sqlmodel_ext import Text1K, Text1024, Text2K, Text2500, Text3K, Text5K, Text10K, Text16K, Text32K, Text60K, Text64K, Text100K, Text128K, Text1M
|
|
37
37
|
```
|
|
38
38
|
|
|
39
39
|
| 类型 | `max_length` |
|
|
@@ -45,10 +45,12 @@ from sqlmodel_ext import Text1K, Text1024, Text2K, Text2500, Text3K, Text5K, Tex
|
|
|
45
45
|
| `Text3K` | 3000 |
|
|
46
46
|
| `Text5K` | 5000 |
|
|
47
47
|
| `Text10K` | 10000 |
|
|
48
|
+
| `Text16K` | 16000 |
|
|
48
49
|
| `Text32K` | 32000 |
|
|
49
50
|
| `Text60K` | 60000 |
|
|
50
51
|
| `Text64K` | 65536 |
|
|
51
52
|
| `Text100K` | 100000 |
|
|
53
|
+
| `Text128K` | 131072(= 128 × 1024) |
|
|
52
54
|
| `Text1M` | 1000000 |
|
|
53
55
|
|
|
54
56
|
## 数值约束
|
|
@@ -8,7 +8,7 @@
|
|
|
8
8
|
- 理解"模型 + Mixin = 表"这个核心范式
|
|
9
9
|
|
|
10
10
|
::: tip 不需要事先懂 SQLAlchemy 或 SQLModel
|
|
11
|
-
本教程会按需引入这些概念。你只需要 Python 3.
|
|
11
|
+
本教程会按需引入这些概念。你只需要 Python 3.12+ 和基本的 `async` / `await` 知识。如果你完全没接触过 ORM,建议在开始之前先扫一眼 [前置知识](/explanation/prerequisites)。
|
|
12
12
|
:::
|
|
13
13
|
|
|
14
14
|
## 0. 准备环境
|
|
@@ -4,7 +4,7 @@ build-backend = "hatchling.build"
|
|
|
4
4
|
|
|
5
5
|
[project]
|
|
6
6
|
name = "sqlmodel-ext"
|
|
7
|
-
version = "0.3.
|
|
7
|
+
version = "0.3.4"
|
|
8
8
|
description = "Extended SQLModel infrastructure: smart metaclass, async CRUD mixins, polymorphic inheritance, optimistic locking, relation preloading, and reusable field types."
|
|
9
9
|
readme = "README.md"
|
|
10
10
|
license = "MIT"
|
|
@@ -20,7 +20,7 @@ Quick start::
|
|
|
20
20
|
user = await user.save(session)
|
|
21
21
|
users = await User.get(session, fetch_mode="all")
|
|
22
22
|
"""
|
|
23
|
-
__version__ = "0.3.
|
|
23
|
+
__version__ = "0.3.4"
|
|
24
24
|
|
|
25
25
|
# Base
|
|
26
26
|
from sqlmodel_ext.base import SQLModelBase, ExtraIgnoreModelBase
|
|
@@ -94,10 +94,12 @@ from sqlmodel_ext.field_types import (
|
|
|
94
94
|
Text3K,
|
|
95
95
|
Text5K,
|
|
96
96
|
Text10K,
|
|
97
|
+
Text16K,
|
|
97
98
|
Text32K,
|
|
98
99
|
Text60K,
|
|
99
100
|
Text64K,
|
|
100
101
|
Text100K,
|
|
102
|
+
Text128K,
|
|
101
103
|
Text1M,
|
|
102
104
|
# Numeric constraints
|
|
103
105
|
INT32_MAX,
|
|
@@ -59,8 +59,35 @@ def test_toplevel_import() -> None:
|
|
|
59
59
|
# Field types - path/string/numeric/custom
|
|
60
60
|
"DirectoryPathType",
|
|
61
61
|
"FilePathType",
|
|
62
|
+
# Str ladder (whole range — guards against export drift)
|
|
63
|
+
"Str16",
|
|
64
|
+
"Str24",
|
|
65
|
+
"Str32",
|
|
66
|
+
"Str36",
|
|
67
|
+
"Str48",
|
|
68
|
+
"Str64",
|
|
69
|
+
"Str100",
|
|
70
|
+
"Str128",
|
|
71
|
+
"Str255",
|
|
62
72
|
"Str256",
|
|
73
|
+
"Str500",
|
|
74
|
+
"Str512",
|
|
75
|
+
"Str2048",
|
|
76
|
+
# Text ladder (whole range — guards against export drift)
|
|
63
77
|
"Text1K",
|
|
78
|
+
"Text1024",
|
|
79
|
+
"Text2K",
|
|
80
|
+
"Text2500",
|
|
81
|
+
"Text3K",
|
|
82
|
+
"Text5K",
|
|
83
|
+
"Text10K",
|
|
84
|
+
"Text16K",
|
|
85
|
+
"Text32K",
|
|
86
|
+
"Text60K",
|
|
87
|
+
"Text64K",
|
|
88
|
+
"Text100K",
|
|
89
|
+
"Text128K",
|
|
90
|
+
"Text1M",
|
|
64
91
|
"Port",
|
|
65
92
|
"Percentage",
|
|
66
93
|
"PositiveInt",
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/docs/en/how-to/release-connection-during-long-io.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/src/sqlmodel_ext/field_types/_internal/__init__.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/src/sqlmodel_ext/field_types/dialects/postgresql/array.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/src/sqlmodel_ext/field_types/mixins/module_name_mixin.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{sqlmodel_ext-0.3.3 → sqlmodel_ext-0.3.4}/tests/test_annotated_default_factory_inheritance.py
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|