Skip to content

Coverage of the FastAPI, Pydantic and SQLAlchemy documentation

py2axum is measured on the examples of the official documentation: every app of FastAPI's docs_src/ (FastAPI 0.142.3), replayed with FastAPI's own tests (tests/test_tutorial/) against the Python reference and against the binary, and every Pydantic 2.14.0 documentation block that validates a model, served by a minimal FastAPI route around each model. Responses are compared as the conformance harness compares them: status, headers, body byte for byte, key order included. The SQLAlchemy documentation has its own section. The bench is in corpus/ (how it works).

Status Meaning
identical every compared response is the same
documented the responses differ only by a documented difference (the order of a set, an integer beyond 64 bits)
differs at least one response differs (a bug, unless listed in supported.md)
refused py2axum refuses the example at translation, with the reason at file:line
error the translator crashed, or the generated code did not compile or start
untested translated, but no official test sends it a request
docs-only its tests only request /openapi.json or /docs, which the binary does not serve
nondeterministic Python's own responses vary from run to run (random): compared, never counted
reference-fails the Python reference itself fails (SQLAlchemy section only): listed, never counted

The OpenAPI schema and documentation pages are not served by the binary (see supported.md): those requests are sent to both servers but not compared. Requests a test sends while it sets app.dependency_overrides are not compared either (only the in-process app sees the override). A JWT in a body is compared claim by claim, its exp/iat/nbf within 2 seconds (the two servers are called one after the other). The share is that of the identical and documented examples among those a test exercises over HTTP (untested, docs-only and nondeterministic ones are counted apart).

Summary

Corpus Examples identical documented differs refused error untested docs-only nondeterministic reference-fails Share
FastAPI 339 284 5 0 35 0 11 4 0 0 90.6 %
Pydantic 238 213 3 0 22 0 0 0 0 0 90.8 %

Bench run: discover 9.8 s, check 93.4 s, generate 543.6 s, build 740.4 s, replay 558.0 s, total 1945.2 s.

Most frequent refusals

An example may be refused for several reasons; each is counted once per example.

Construction Examples
Enum or non-Pydantic type 13
dependency 9
type … 8
module-level statement 5
Pydantic validator 5
route option …= 4
library sqlmodel 4
app.mount 4
non-constant value 3
Annotated metadata 3
router registration 2
FastAPI() option 2
type Json 2
Python construct 1
library opentelemetry 1
library yaml 1
Field option 1

Tutorial - User Guide

Page Examples identical differs refused error other Share
First Steps 2 2 0 0 0 0 100.0 %
Path Parameters 6 6 0 0 0 0 100.0 %
Query Parameters 6 6 0 0 0 0 100.0 %
Request Body 4 4 0 0 0 0 100.0 %
Query Parameters and String Validations 30 29 0 1 0 0 96.7 %
Path Parameters and Numeric Validations 12 12 0 0 0 0 100.0 %
Query Parameter Models 4 4 0 0 0 0 100.0 %
Body - Multiple Parameters 9 9 0 0 0 0 100.0 %
Body - Fields 2 2 0 0 0 0 100.0 %
Body - Nested Models 9 9 0 0 0 0 100.0 %
Declare Request Example Data 8 8 0 0 0 0 100.0 %
Extra Data Types 2 2 0 0 0 0 100.0 %
Cookie Parameters 2 2 0 0 0 0 100.0 %
Header Parameters 6 6 0 0 0 0 100.0 %
Cookie Parameter Models 4 4 0 0 0 0 100.0 %
Header Parameter Models 6 6 0 0 0 0 100.0 %
Response Model - Return Type 12 11 0 1 0 0 100.0 %
Extra Models 5 5 0 0 0 0 100.0 %
Response Status Code 2 2 0 0 0 0 100.0 %
Form Data 2 2 0 0 0 0 100.0 %
Form Models 4 4 0 0 0 0 100.0 %
Request Files 10 10 0 0 0 0 100.0 %
Request Forms and Files 2 2 0 0 0 0 100.0 %
Handling Errors 6 6 0 0 0 0 100.0 %
Path Operation Configuration 7 7 0 0 0 0 100.0 %
JSON Compatible Encoder 1 1 0 0 0 0 100.0 %
Body - Updates 2 2 0 0 0 0 100.0 %
Dependencies 3 3 0 0 0 0 100.0 %
Classes as Dependencies 6 6 0 0 0 0 100.0 %
Sub-dependencies 2 2 0 0 0 0 100.0 %
Dependencies in path operation decorators 2 2 0 0 0 0 100.0 %
Global Dependencies 2 2 0 0 0 0 100.0 %
Dependencies with yield 8 8 0 0 0 0 100.0 %
Security - First Steps 2 2 0 0 0 0 100.0 %
Get Current User 2 2 0 0 0 0 100.0 %
Simple OAuth2 with Password and Bearer 2 2 0 0 0 0 100.0 %
OAuth2 with Password (and hashing), Bearer with JWT tokens 2 2 0 0 0 0 100.0 %
Middleware 1 0 0 0 0 1 0.0 %
CORS (Cross-Origin Resource Sharing) 1 1 0 0 0 0 100.0 %
SQL (Relational) Databases 4 0 0 4 0 0 0.0 %
Bigger Applications - Multiple Files 1 1 0 0 0 0 100.0 %
Stream JSON Lines 1 1 0 0 0 0 100.0 %
Server-Sent Events (SSE) 5 5 0 0 0 0 100.0 %
Background Tasks 3 3 0 0 0 0 100.0 %
Metadata and Docs URLs 5 5 0 0 0 0 100.0 %
Frontend 6 0 0 0 0 6 0.0 %
Static Files 1 0 0 1 0 0 0.0 %
Testing 4 4 0 0 0 0 100.0 %
Debugging 1 1 0 0 0 0 100.0 %
Tutorial - User Guide: refused, differing and failing examples ### Query Parameters and String Validations - `docs_src/query_params_str_validations/tutorial015_an_py310.py` — refused: Pydantic validator at `docs_src/query_params_str_validations/tutorial015_an_py310.py:24` ### Response Model - Return Type - `docs_src/response_model/tutorial003_04_py310.py` — refused: type … at `docs_src/response_model/tutorial003_04_py310.py:8` ### SQL (Relational) Databases - `docs_src/sql_databases/tutorial001_an_py310.py` — refused: library sqlmodel at `docs_src/sql_databases/tutorial001_an_py310.py:22` (+4 more) - `docs_src/sql_databases/tutorial001_py310.py` — refused: library sqlmodel at `docs_src/sql_databases/tutorial001_py310.py:20` (+4 more) - `docs_src/sql_databases/tutorial002_an_py310.py` — refused: library sqlmodel at `docs_src/sql_databases/tutorial002_an_py310.py:39` (+5 more) - `docs_src/sql_databases/tutorial002_py310.py` — refused: library sqlmodel at `docs_src/sql_databases/tutorial002_py310.py:37` (+5 more) ### Static Files - `docs_src/static_files/tutorial001_py310.py` — refused: app.mount at `docs_src/static_files/tutorial001_py310.py:6`

Advanced User Guide

Page Examples identical differs refused error other Share
Stream Data 2 1 0 1 0 0 50.0 %
Path Operation Advanced Configuration 7 6 0 1 0 0 85.7 %
Additional Status Codes 2 2 0 0 0 0 100.0 %
Return a Response Directly 2 2 0 0 0 0 100.0 %
Custom Response - HTML, Stream, File, others 15 11 0 4 0 0 84.6 %
Additional Responses in OpenAPI 4 4 0 0 0 0 100.0 %
Response Cookies 2 2 0 0 0 0 100.0 %
Response Headers 2 2 0 0 0 0 100.0 %
Response - Change Status Code 1 1 0 0 0 0 100.0 %
Advanced Dependencies 4 2 0 2 0 0 100.0 %
OAuth2 scopes 2 0 0 2 0 0 0.0 %
HTTP Basic Auth 4 4 0 0 0 0 100.0 %
Using the Request Directly 1 1 0 0 0 0 100.0 %
Using Dataclasses 3 0 0 3 0 0 0.0 %
Advanced Middleware 3 3 0 0 0 0 100.0 %
Sub Applications - Mounts 1 0 0 1 0 0 0.0 %
Behind a Proxy 5 5 0 0 0 0 100.0 %
Templates 1 0 0 1 0 0 0.0 %
WebSockets 4 4 0 0 0 0 100.0 %
Lifespan Events 3 2 0 0 0 1 100.0 %
OpenTelemetry 3 1 0 2 0 0 33.3 %
Testing WebSockets 1 1 0 0 0 0 100.0 %
Testing Events: lifespan and startup - shutdown 2 1 0 0 0 1 100.0 %
Testing Dependencies with Overrides 2 2 0 0 0 0 100.0 %
Async Tests 1 0 0 0 0 1 0.0 %
Settings and Environment Variables 6 4 0 0 0 2 100.0 %
OpenAPI Callbacks 1 1 0 0 0 0 100.0 %
OpenAPI Webhooks 1 1 0 0 0 0 100.0 %
Including WSGI - Flask, Django, others 1 0 0 1 0 0 0.0 %
Generating SDKs 3 3 0 0 0 0 100.0 %
JSON with Bytes as Base64 1 1 0 0 0 0 100.0 %
Strict Content-Type Checking 1 1 0 0 0 0 100.0 %
Advanced User Guide: refused, differing and failing examples ### Stream Data - `docs_src/stream_data/tutorial002_py310.py` — refused: route option …= at `docs_src/stream_data/tutorial002_py310.py:23` (+4 more) ### Path Operation Advanced Configuration - `docs_src/path_operation_advanced_configuration/tutorial007_py310.py` — refused: library yaml at `docs_src/path_operation_advanced_configuration/tutorial007_py310.py:25` ### Custom Response - HTML, Stream, File, others - `docs_src/custom_response/tutorial001_py310.py` — refused: route option …= at `docs_src/custom_response/tutorial001_py310.py:7` - `docs_src/custom_response/tutorial001b_py310.py` — refused: route option …= at `docs_src/custom_response/tutorial001b_py310.py:7` - `docs_src/custom_response/tutorial008_py310.py` — refused: Python construct at `docs_src/custom_response/tutorial008_py310.py:12` - `docs_src/custom_response/tutorial009c_py310.py` — refused: route option …= at `docs_src/custom_response/tutorial009c_py310.py:17` ### Advanced Dependencies - `docs_src/dependencies/tutorial013_an_py310.py` — refused: dependency at `docs_src/dependencies/tutorial013_an_py310.py:21` - `docs_src/dependencies/tutorial014_an_py310.py` — refused: dependency at `docs_src/dependencies/tutorial014_an_py310.py:21` ### OAuth2 scopes - `docs_src/security/tutorial005_an_py310.py` — refused: type … at `docs_src/security/tutorial005_an_py310.py:109` (+2 more) - `docs_src/security/tutorial005_py310.py` — refused: type … at `docs_src/security/tutorial005_py310.py:108` (+2 more) ### Using Dataclasses - `docs_src/dataclasses_/tutorial001_py310.py` — refused: Enum or non-Pydantic type at `docs_src/dataclasses_/tutorial001_py310.py:18` - `docs_src/dataclasses_/tutorial002_py310.py` — refused: Enum or non-Pydantic type at `docs_src/dataclasses_/tutorial002_py310.py:18` - `docs_src/dataclasses_/tutorial003_py310.py` — refused: Enum or non-Pydantic type at `docs_src/dataclasses_/tutorial003_py310.py:27` (+1 more) ### Sub Applications - Mounts - `docs_src/sub_applications/tutorial001_py310.py` — refused: app.mount at `docs_src/sub_applications/tutorial001_py310.py:19` ### Templates - `docs_src/templates/tutorial001_py310.py` — refused: app.mount at `docs_src/templates/tutorial001_py310.py:8` ### OpenTelemetry - `docs_src/opentelemetry/tutorial002_py310.py` — refused: FastAPI() option at `docs_src/opentelemetry/tutorial002_py310.py:8` (+1 more) - `docs_src/opentelemetry/tutorial003_py310.py` — refused: FastAPI() option at `docs_src/opentelemetry/tutorial003_py310.py:3` ### Including WSGI - Flask, Django, others - `docs_src/wsgi/tutorial001_py310.py` — refused: app.mount at `docs_src/wsgi/tutorial001_py310.py:23`

How To - Recipes

Page Examples identical differs refused error other Share
Migrate from Pydantic v1 to Pydantic v2 3 0 0 0 0 3 0.0 %
GraphQL 1 0 0 1 0 0 0.0 %
Custom Request and APIRoute class 5 0 0 5 0 0 0.0 %
Conditional OpenAPI 1 1 0 0 0 0 100.0 %
Extending OpenAPI 1 0 0 1 0 0 0.0 %
Separate OpenAPI Schemas for Input and Output or Not 2 2 0 0 0 0 100.0 %
Custom Docs UI Static Assets (Self-Hosting) 2 0 0 2 0 0 0.0 %
Configure Swagger UI 3 3 0 0 0 0 100.0 %
Use Old 403 Authentication Error Status Codes 1 0 0 1 0 0 0.0 %
How To - Recipes: refused, differing and failing examples ### GraphQL - `docs_src/graphql_/tutorial001_py310.py` — refused: router registration at `docs_src/graphql_/tutorial001_py310.py:25` ### Custom Request and APIRoute class - `docs_src/custom_request_and_route/tutorial001_an_py310.py` — refused: module-level statement at `docs_src/custom_request_and_route/tutorial001_an_py310.py:31` - `docs_src/custom_request_and_route/tutorial001_py310.py` — refused: module-level statement at `docs_src/custom_request_and_route/tutorial001_py310.py:30` - `docs_src/custom_request_and_route/tutorial002_an_py310.py` — refused: module-level statement at `docs_src/custom_request_and_route/tutorial002_an_py310.py:25` - `docs_src/custom_request_and_route/tutorial002_py310.py` — refused: module-level statement at `docs_src/custom_request_and_route/tutorial002_py310.py:24` - `docs_src/custom_request_and_route/tutorial003_py310.py` — refused: router registration at `docs_src/custom_request_and_route/tutorial003_py310.py:26` ### Extending OpenAPI - `docs_src/extending_openapi/tutorial001_py310.py` — refused: module-level statement at `docs_src/extending_openapi/tutorial001_py310.py:29` ### Custom Docs UI Static Assets (Self-Hosting) - `docs_src/custom_docs_ui/tutorial001_py310.py` — refused: non-constant value at `docs_src/custom_docs_ui/tutorial001_py310.py:22` - `docs_src/custom_docs_ui/tutorial002_py310.py` — refused: non-constant value at `docs_src/custom_docs_ui/tutorial002_py310.py:25` ### Use Old 403 Authentication Error Status Codes - `docs_src/authentication_error_status_code/tutorial001_an_py310.py` — refused: dependency at `docs_src/authentication_error_status_code/tutorial001_an_py310.py:20`

Pydantic

Page Examples identical differs refused error other Share
standard_library_types 16 14 0 2 0 0 87.5 %
alias 11 11 0 0 0 0 100.0 %
config 5 4 0 1 0 0 80.0 %
Experimental Features 3 3 0 0 0 0 100.0 %
fields 16 16 0 0 0 0 100.0 %
forward_annotations 2 2 0 0 0 0 100.0 %
JSON 3 3 0 0 0 0 100.0 %
json_schema 4 1 0 3 0 0 25.0 %
normal copy gives the same object reference for bar: 24 22 0 2 0 0 91.7 %
Performance tips 1 1 0 0 0 0 100.0 %
returns a dictionary: 13 13 0 0 0 0 100.0 %
strict_mode 3 3 0 0 0 0 100.0 %
item_data could come from an API call, eg., via something like: 1 1 0 0 0 0 100.0 %
We now create an Annotated wrapper that we'll use as the annotation for fields on BaseModels, etc. 7 1 0 6 0 0 14.3 %
Errors are quite verbose with a normal union: 8 8 0 0 0 0 100.0 %
validators 16 16 0 0 0 0 100.0 %
errors 3 3 0 0 0 0 100.0 %
this works, though 4 2 0 2 0 0 50.0 %
from Python 82 77 0 5 0 0 93.9 %
custom_validators 1 1 0 0 0 0 100.0 %
type: ignore 5 5 0 0 0 0 100.0 %
architecture 1 1 0 0 0 0 100.0 %
V1 6 5 0 1 0 0 83.3 %
Why use Pydantic Validation? 3 3 0 0 0 0 100.0 %
Pydantic: refused, differing and failing examples ### standard_library_types - `docs/api/standard_library_types.md:1415` — refused: type … at `docs/api/standard_library_types.md:1421` - `docs/api/standard_library_types.md:512` — refused: non-constant value at `docs/api/standard_library_types.md:519` ### config - `docs/concepts/config.md:236` — refused: Enum or non-Pydantic type at `docs/concepts/config.md:253` ### json_schema - `docs/concepts/json_schema.md:646` — refused: Enum or non-Pydantic type at `docs/concepts/json_schema.md:695` - `docs/concepts/json_schema.md:724` — refused: Annotated metadata at `docs/concepts/json_schema.md:761` - `docs/concepts/json_schema.md:792` — refused: Annotated metadata at `docs/concepts/json_schema.md:812` ### normal copy gives the same object reference for bar: - `docs/concepts/models.md:1420` — refused: Enum or non-Pydantic type at `docs/concepts/models.md (generated route, line 37)` (+1 more) - `docs/concepts/models.md:1681` — refused: Field option at `docs/concepts/models.md:1689` ### We now create an `Annotated` wrapper that we'll use as the annotation for fields on `BaseModel`s, etc. - `docs/concepts/types.md:518` — refused: Pydantic validator at `docs/concepts/types.md:539` - `docs/concepts/types.md:557` — refused: Annotated metadata at `docs/concepts/types.md:634` - `docs/concepts/types.md:695` — refused: Pydantic validator at `docs/concepts/types.md:705` - `docs/concepts/types.md:746` — refused: type … at `docs/concepts/types.md:834` - `docs/concepts/types.md:892` — refused: type … at `docs/concepts/types.md:946` - `docs/concepts/types.md:972` — refused: Enum or non-Pydantic type at `docs/concepts/types.md:1003` ### this works, though - `docs/errors/usage_errors.md:10` — refused: Enum or non-Pydantic type at `docs/errors/usage_errors.md:18` - `docs/errors/usage_errors.md:403` — refused: Pydantic validator at `docs/errors/usage_errors.md:424` ### from Python - `docs/errors/validation_errors.md:1261` — refused: type … at `docs/errors/validation_errors.md:1267` - `docs/errors/validation_errors.md:1306` — refused: type Json at `docs/errors/validation_errors.md:1310` - `docs/errors/validation_errors.md:1325` — refused: type Json at `docs/errors/validation_errors.md:1329` - `docs/errors/validation_errors.md:1664` — refused: Enum or non-Pydantic type at `docs/errors/validation_errors.md:1675` - `docs/errors/validation_errors.md:182` — refused: type … at `docs/errors/validation_errors.md:189` ### V1 - `docs/migration.md:416` — refused: Pydantic validator at `docs/migration.md:424`

SQLAlchemy

The SQLAlchemy 2.1.4 documentation is run as SQLAlchemy runs it, as doctests (the units of test/base/test_tutorials.py: the Unified Tutorial, the ORM Quick Start, the ORM Querying Guide, large collections, asyncio; then other ORM, extension and Core pages, as written). Each code block that executes SQL is an example: a minimal FastAPI route runs it, preceded by the earlier statements of the page it depends on, in a session of its own, and returns what the block prints and displays. A block that only shows a SELECT for its SQL text is executed too (rows returned). Each route exists twice: sync (a Session dependency) and async (an AsyncSession with expire_on_commit=False, await on its methods). PostgreSQL, the database put back to the page's seed data before every request; the Python reference and the binary are compared as above. reference-fails: the Python reference fails on the route (mostly a lazy load under AsyncSession, which raises MissingGreenlet).

The examples are in three scopes. ORM: queries a route runs with the ORM (select, joins, aggregates, CTE, subqueries, insert/update/delete, relationships, loader options, types, extensions); its share is the one py2axum 1.0 requires (90 %). Core: the Core chapters of the Unified Tutorial (Table, text()). Outside API use: a block about DDL, reflection, events or the pool, or about a session's state across statements (identity map, expunge, pending sets), the way a script or a long-lived session works. Core and outside are measured and published, without a threshold.

Scope / variant Examples identical documented differs refused error untested docs-only nondeterministic reference-fails Share
SQLAlchemy ORM (1.0 threshold: 90 %) 276 243 0 0 16 0 0 0 2 15 93.8 %
SQLAlchemy Core (aimed at for 1.1) 126 110 0 0 14 0 0 0 2 0 88.7 %
outside API use (measured only) 78 32 0 0 44 0 0 0 0 2 42.1 %
sync 239 201 0 0 36 0 0 0 2 0 84.8 %
async 241 184 0 0 38 0 0 0 2 17 82.9 %
all of SQLAlchemy 480 385 0 0 74 0 0 0 4 17 83.9 %

Not in the corpus: 22 examples (both variants) the bench cannot run as written: Python fails on PostgreSQL (22) (SQLite-only SQL, a statement of the page that fails before them).

SQLAlchemy: most frequent refusals

Construction Examples
sqlalchemy.orm.aliased(): aliased(Model) or aliased(Model, name=...) only 14
sqlalchemy.union_all() 14
method .cte() not in the runtime 4
method .over() not in the runtime 4
sqlalchemy.orm.with_polymorphic(): with_polymorphic(Base, [Sub, ...] or "*") only: aliased=, flat=, 4
@dataclass(eq=) is not supported (CaseInsensitiveWord) 4
sqlalchemy.literal_column() 2
method .correlate() not in the runtime 2
sqlalchemy.orm.joinedload(): joinedload() takes exactly one positional argument here 2
sqlalchemy.orm.contains_eager() 2
sqlalchemy.orm.Bundle() 2
method .from_statement() not in the runtime 2
Model.table.join: the Core use of a mapped class's table is not supported (introspection only: n 2
method .yield_per() not in the runtime 2
method .partitions() not in the runtime 2
sqlalchemy.orm.with_expression() 2
conn.run_sync(fn): only run_sync(Base.metadata.create_all) is supported (its DDL is compiled at tr 2
option primaryjoin= is not supported 2
annotate with Mapped[...] 2
@word_insensitive.inplace.comparator is not supported (a hybrid's expression and setter only) 2
@dataclass(eq=) is not supported (Point) 2

SQLAlchemy: per page

Page Section Blocks identical differs refused error other sync async Share
Working with Transactions and the DBAPI SQLAlchemy Unified Tutorial 8 16 0 0 0 0 100.0 % 100.0 % 100.0 %
Using INSERT Statements SQLAlchemy Unified Tutorial 3 6 0 0 0 0 100.0 % 100.0 % 100.0 %
Using SELECT Statements SQLAlchemy Unified Tutorial 56 88 0 22 0 2 80.0 % 80.0 % 80.0 %
Using UPDATE and DELETE Statements SQLAlchemy Unified Tutorial 2 4 0 0 0 0 100.0 % 100.0 % 100.0 %
Data Manipulation with the ORM SQLAlchemy Unified Tutorial 8 14 0 0 0 2 100.0 % 100.0 % 100.0 %
Working with ORM Related Objects SQLAlchemy Unified Tutorial 11 17 0 4 0 1 81.8 % 80.0 % 81.0 %
ORM Quick Start SQLAlchemy ORM 8 11 0 0 0 5 100.0 % 100.0 % 100.0 %
Writing SELECT statements for ORM Mapped Classes SQLAlchemy ORM Querying Guide 42 62 0 22 0 0 73.8 % 73.8 % 73.8 %
ORM API Features for Querying SQLAlchemy ORM Querying Guide 5 5 0 4 0 1 60.0 % 50.0 % 55.6 %
Writing SELECT statements for Inheritance Mappings SQLAlchemy ORM Querying Guide 19 32 0 4 0 2 89.5 % 88.2 % 88.9 %
ORM-Enabled INSERT, UPDATE, and DELETE statements SQLAlchemy ORM Querying Guide 23 44 0 0 0 2 100.0 % 100.0 % 100.0 %
Column Loading Options SQLAlchemy ORM Querying Guide 20 30 0 4 0 6 90.0 % 85.7 % 88.2 %
Relationship Loading Techniques SQLAlchemy ORM Querying Guide 6 12 0 0 0 0 100.0 % 100.0 % 100.0 %
Working with Large Collections SQLAlchemy ORM 12 24 0 0 0 0 100.0 % 100.0 % 100.0 %
Asynchronous I/O (asyncio) SQLAlchemy ORM 2 0 0 2 0 0 0.0 % 0.0 % 0.0 %
Composite Column Types SQLAlchemy ORM 5 10 0 0 0 0 100.0 % 100.0 % 100.0 %
Special Relationship Persistence Patterns SQLAlchemy ORM 1 0 0 2 0 0 0.0 % 0.0 % 0.0 %
Association Proxy SQLAlchemy ORM Extensions 1 0 0 2 0 0 0.0 % 0.0 % 0.0 %
Hybrid Attributes SQLAlchemy ORM Extensions 9 10 0 8 0 0 55.6 % 55.6 % 55.6 %
SQLAlchemy: refused, differing and failing examples #### Using SELECT Statements (`doc/build/tutorial/data_select.rst`) - `doc/build/tutorial/data_select.rst:302` async — refused: `sqlalchemy.literal_column()` at `doc/build/tutorial/data_select.rst:303` - `doc/build/tutorial/data_select.rst:302` sync — refused: `sqlalchemy.literal_column()` at `doc/build/tutorial/data_select.rst:303` - `doc/build/tutorial/data_select.rst:846` async — refused: method .cte() not in the runtime at `doc/build/tutorial/data_select.rst:846` - `doc/build/tutorial/data_select.rst:846` sync — refused: method .cte() not in the runtime at `doc/build/tutorial/data_select.rst:846` - `doc/build/tutorial/data_select.rst:905` async — refused: sqlalchemy.orm.aliased(): aliased(Model) or aliased(Model, name=...) only at `doc/build/tutorial/data_select.rst:906` - `doc/build/tutorial/data_select.rst:905` sync — refused: sqlalchemy.orm.aliased(): aliased(Model) or aliased(Model, name=...) only at `doc/build/tutorial/data_select.rst:906` - `doc/build/tutorial/data_select.rst:934` async — refused: method .cte() not in the runtime at `doc/build/tutorial/data_select.rst:934` - `doc/build/tutorial/data_select.rst:934` sync — refused: method .cte() not in the runtime at `doc/build/tutorial/data_select.rst:934` - `doc/build/tutorial/data_select.rst:1055` async — refused: method .correlate() not in the runtime at `doc/build/tutorial/data_select.rst:1044` - `doc/build/tutorial/data_select.rst:1055` sync — refused: method .correlate() not in the runtime at `doc/build/tutorial/data_select.rst:1044` - `doc/build/tutorial/data_select.rst:1166` async — refused: `sqlalchemy.union_all()` at `doc/build/tutorial/data_select.rst:1169` - `doc/build/tutorial/data_select.rst:1166` sync — refused: `sqlalchemy.union_all()` at `doc/build/tutorial/data_select.rst:1169` - `doc/build/tutorial/data_select.rst:1189` async — refused: `sqlalchemy.union_all()` at `doc/build/tutorial/data_select.rst:1169` - `doc/build/tutorial/data_select.rst:1189` sync — refused: `sqlalchemy.union_all()` at `doc/build/tutorial/data_select.rst:1169` - `doc/build/tutorial/data_select.rst:1239` async — refused: `sqlalchemy.union_all()` at `doc/build/tutorial/data_select.rst:1230` - `doc/build/tutorial/data_select.rst:1239` sync — refused: `sqlalchemy.union_all()` at `doc/build/tutorial/data_select.rst:1230` - `doc/build/tutorial/data_select.rst:1265` async — refused: `sqlalchemy.union_all()` at `doc/build/tutorial/data_select.rst:1230` - `doc/build/tutorial/data_select.rst:1265` sync — refused: `sqlalchemy.union_all()` at `doc/build/tutorial/data_select.rst:1230` - `doc/build/tutorial/data_select.rst:1596` async — refused: method .over() not in the runtime at `doc/build/tutorial/data_select.rst:1596` - `doc/build/tutorial/data_select.rst:1596` sync — refused: method .over() not in the runtime at `doc/build/tutorial/data_select.rst:1596` - `doc/build/tutorial/data_select.rst:1622` async — refused: method .over() not in the runtime at `doc/build/tutorial/data_select.rst:1622` - `doc/build/tutorial/data_select.rst:1622` sync — refused: method .over() not in the runtime at `doc/build/tutorial/data_select.rst:1622` #### Data Manipulation with the ORM (`doc/build/tutorial/orm_data_manipulation.rst`) - `doc/build/tutorial/orm_data_manipulation.rst:464` async — the Python reference fails: `sqlalchemy.exc.StatementError: (sqlalchemy.exc.MissingGreenlet) greenlet_spawn has not been called; can't call await_() here. Was IO attemp…` - `doc/build/tutorial/orm_data_manipulation.rst:545` async — the Python reference fails: `sqlalchemy.exc.StatementError: (sqlalchemy.exc.MissingGreenlet) greenlet_spawn has not been called; can't call await_() here. Was IO attemp…` #### Working with ORM Related Objects (`doc/build/tutorial/orm_related_objects.rst`) - `doc/build/tutorial/orm_related_objects.rst:243` async — the Python reference fails: `sqlalchemy.exc.StatementError: (sqlalchemy.exc.MissingGreenlet) greenlet_spawn has not been called; can't call await_() here. Was IO attemp…` - `doc/build/tutorial/orm_related_objects.rst:490` async — refused: sqlalchemy.orm.joinedload(): joinedload() takes exactly one positional argument here at `doc/build/tutorial/orm_related_objects.rst:491` - `doc/build/tutorial/orm_related_objects.rst:490` sync — refused: sqlalchemy.orm.joinedload(): joinedload() takes exactly one positional argument here at `doc/build/tutorial/orm_related_objects.rst:491` - `doc/build/tutorial/orm_related_objects.rst:559` async — refused: `sqlalchemy.orm.contains_eager()` at `doc/build/tutorial/orm_related_objects.rst:560` - `doc/build/tutorial/orm_related_objects.rst:559` sync — refused: `sqlalchemy.orm.contains_eager()` at `doc/build/tutorial/orm_related_objects.rst:560` #### ORM Quick Start (`doc/build/orm/quickstart.rst`) - `doc/build/orm/quickstart.rst:335` async — the Python reference fails: `sqlalchemy.exc.StatementError: (sqlalchemy.exc.MissingGreenlet) greenlet_spawn has not been called; can't call await_() here. Was IO attemp…` - `doc/build/orm/quickstart.rst:381` async — the Python reference fails: `sqlalchemy.exc.StatementError: (sqlalchemy.exc.MissingGreenlet) greenlet_spawn has not been called; can't call await_() here. Was IO attemp…` - `doc/build/orm/quickstart.rst:405` async — the Python reference fails: `sqlalchemy.exc.StatementError: (sqlalchemy.exc.MissingGreenlet) greenlet_spawn has not been called; can't call await_() here. Was IO attemp…` - `doc/build/orm/quickstart.rst:418` async — the Python reference fails: `sqlalchemy.exc.StatementError: (sqlalchemy.exc.MissingGreenlet) greenlet_spawn has not been called; can't call await_() here. Was IO attemp…` - `doc/build/orm/quickstart.rst:440` async — the Python reference fails: `sqlalchemy.exc.StatementError: (sqlalchemy.exc.MissingGreenlet) greenlet_spawn has not been called; can't call await_() here. Was IO attemp…` #### Writing SELECT statements for ORM Mapped Classes (`doc/build/orm/queryguide/select.rst`) - `doc/build/orm/queryguide/select.rst:214` async — refused: `sqlalchemy.orm.Bundle()` at `doc/build/orm/queryguide/select.rst:215` - `doc/build/orm/queryguide/select.rst:214` sync — refused: `sqlalchemy.orm.Bundle()` at `doc/build/orm/queryguide/select.rst:215` - `doc/build/orm/queryguide/select.rst:325` async — refused: method .from_statement() not in the runtime at `doc/build/orm/queryguide/select.rst:325` - `doc/build/orm/queryguide/select.rst:325` sync — refused: method .from_statement() not in the runtime at `doc/build/orm/queryguide/select.rst:325` - `doc/build/orm/queryguide/select.rst:341` async — refused: sqlalchemy.orm.aliased(): aliased(Model) or aliased(Model, name=...) only at `doc/build/orm/queryguide/select.rst:341` - `doc/build/orm/queryguide/select.rst:341` sync — refused: sqlalchemy.orm.aliased(): aliased(Model) or aliased(Model, name=...) only at `doc/build/orm/queryguide/select.rst:341` - `doc/build/orm/queryguide/select.rst:373` async — refused: sqlalchemy.orm.aliased(): aliased(Model) or aliased(Model, name=...) only at `doc/build/orm/queryguide/select.rst:375` - `doc/build/orm/queryguide/select.rst:373` sync — refused: sqlalchemy.orm.aliased(): aliased(Model) or aliased(Model, name=...) only at `doc/build/orm/queryguide/select.rst:375` - `doc/build/orm/queryguide/select.rst:393` async — refused: sqlalchemy.orm.aliased(): aliased(Model) or aliased(Model, name=...) only at `doc/build/orm/queryguide/select.rst:400` - `doc/build/orm/queryguide/select.rst:393` sync — refused: sqlalchemy.orm.aliased(): aliased(Model) or aliased(Model, name=...) only at `doc/build/orm/queryguide/select.rst:400` - `doc/build/orm/queryguide/select.rst:431` async — refused: `sqlalchemy.union_all()` at `doc/build/orm/queryguide/select.rst:432` - `doc/build/orm/queryguide/select.rst:431` sync — refused: `sqlalchemy.union_all()` at `doc/build/orm/queryguide/select.rst:432` - `doc/build/orm/queryguide/select.rst:457` async — refused: `sqlalchemy.union_all()` at `doc/build/orm/queryguide/select.rst:457` - `doc/build/orm/queryguide/select.rst:457` sync — refused: `sqlalchemy.union_all()` at `doc/build/orm/queryguide/select.rst:457` - `doc/build/orm/queryguide/select.rst:774` async — refused: sqlalchemy.orm.aliased(): aliased(Model) or aliased(Model, name=...) only at `doc/build/orm/queryguide/select.rst:774` - `doc/build/orm/queryguide/select.rst:774` sync — refused: sqlalchemy.orm.aliased(): aliased(Model) or aliased(Model, name=...) only at `doc/build/orm/queryguide/select.rst:774` - `doc/build/orm/queryguide/select.rst:801` async — refused: sqlalchemy.orm.aliased(): aliased(Model) or aliased(Model, name=...) only at `doc/build/orm/queryguide/select.rst:801` - `doc/build/orm/queryguide/select.rst:801` sync — refused: sqlalchemy.orm.aliased(): aliased(Model) or aliased(Model, name=...) only at `doc/build/orm/queryguide/select.rst:801` - `doc/build/orm/queryguide/select.rst:845` async — refused: sqlalchemy.orm.aliased(): aliased(Model) or aliased(Model, name=...) only at `doc/build/orm/queryguide/select.rst:838` - `doc/build/orm/queryguide/select.rst:845` sync — refused: sqlalchemy.orm.aliased(): aliased(Model) or aliased(Model, name=...) only at `doc/build/orm/queryguide/select.rst:838` - `doc/build/orm/queryguide/select.rst:917` async — refused: Model.__table__.join: the Core use of a mapped class's table is not supported (introspection only: n at `doc/build/orm/queryguide/select.rst:922` - `doc/build/orm/queryguide/select.rst:917` sync — refused: Model.__table__.join: the Core use of a mapped class's table is not supported (introspection only: n at `doc/build/orm/queryguide/select.rst:922` #### ORM API Features for Querying (`doc/build/orm/queryguide/api.rst`) - `doc/build/orm/queryguide/api.rst:211` async — the Python reference fails: `sqlalchemy.ext.asyncio.exc.AsyncMethodRequired: Can't use the AsyncSession.execute() method with a server-side cursor. Use the AsyncSession…` - `doc/build/orm/queryguide/api.rst:229` async — refused: method .yield_per() not in the runtime at `doc/build/orm/queryguide/api.rst:230` - `doc/build/orm/queryguide/api.rst:229` sync — refused: method .yield_per() not in the runtime at `doc/build/orm/queryguide/api.rst:230` - `doc/build/orm/queryguide/api.rst:245` async — refused: method .partitions() not in the runtime at `doc/build/orm/queryguide/api.rst:246` - `doc/build/orm/queryguide/api.rst:245` sync — refused: method .partitions() not in the runtime at `doc/build/orm/queryguide/api.rst:246` #### Writing SELECT statements for Inheritance Mappings (`doc/build/orm/queryguide/inheritance.rst`) - `doc/build/orm/queryguide/inheritance.rst:90` async — the Python reference fails: `sqlalchemy.exc.StatementError: (sqlalchemy.exc.MissingGreenlet) greenlet_spawn has not been called; can't call await_() here. Was IO attemp…` - `doc/build/orm/queryguide/inheritance.rst:528` async — refused: sqlalchemy.orm.with_polymorphic(): with_polymorphic(Base, [Sub, ...] or "*") only: aliased=, flat=, at `doc/build/orm/queryguide/inheritance.rst:528` - `doc/build/orm/queryguide/inheritance.rst:528` sync — refused: sqlalchemy.orm.with_polymorphic(): with_polymorphic(Base, [Sub, ...] or "*") only: aliased=, flat=, at `doc/build/orm/queryguide/inheritance.rst:528` - `doc/build/orm/queryguide/inheritance.rst:572` async — refused: sqlalchemy.orm.with_polymorphic(): with_polymorphic(Base, [Sub, ...] or "*") only: aliased=, flat=, at `doc/build/orm/queryguide/inheritance.rst:572` - `doc/build/orm/queryguide/inheritance.rst:572` sync — refused: sqlalchemy.orm.with_polymorphic(): with_polymorphic(Base, [Sub, ...] or "*") only: aliased=, flat=, at `doc/build/orm/queryguide/inheritance.rst:572` - `doc/build/orm/queryguide/inheritance.rst:947` async — the Python reference fails: `sqlalchemy.exc.StatementError: (sqlalchemy.exc.MissingGreenlet) greenlet_spawn has not been called; can't call await_() here. Was IO attemp…` #### Column Loading Options (`doc/build/orm/queryguide/columns.rst`) - `doc/build/orm/queryguide/columns.rst:89` async — the Python reference fails: `sqlalchemy.exc.StatementError: (sqlalchemy.exc.MissingGreenlet) greenlet_spawn has not been called; can't call await_() here. Was IO attemp…` - `doc/build/orm/queryguide/columns.rst:129` async — the Python reference fails: `sqlalchemy.exc.StatementError: (sqlalchemy.exc.MissingGreenlet) greenlet_spawn has not been called; can't call await_() here. Was IO attemp…` - `doc/build/orm/queryguide/columns.rst:180` async — the Python reference fails: `sqlalchemy.exc.StatementError: (sqlalchemy.exc.MissingGreenlet) greenlet_spawn has not been called; can't call await_() here. Was IO attemp…` - `doc/build/orm/queryguide/columns.rst:225` async — the Python reference fails: `sqlalchemy.exc.StatementError: (sqlalchemy.exc.MissingGreenlet) greenlet_spawn has not been called; can't call await_() here. Was IO attemp…` - `doc/build/orm/queryguide/columns.rst:356` async — the Python reference fails: `sqlalchemy.exc.StatementError: (sqlalchemy.exc.MissingGreenlet) greenlet_spawn has not been called; can't call await_() here. Was IO attemp…` - `doc/build/orm/queryguide/columns.rst:507` async — the Python reference fails: `sqlalchemy.exc.StatementError: (sqlalchemy.exc.MissingGreenlet) greenlet_spawn has not been called; can't call await_() here. Was IO attemp…` - `doc/build/orm/queryguide/columns.rst:723` async — refused: `sqlalchemy.orm.with_expression()` at `doc/build/orm/queryguide/columns.rst:724` - `doc/build/orm/queryguide/columns.rst:723` sync — refused: `sqlalchemy.orm.with_expression()` at `doc/build/orm/queryguide/columns.rst:724` - `doc/build/orm/queryguide/columns.rst:857` async — refused: `sqlalchemy.union_all()` at `doc/build/orm/queryguide/columns.rst:868` - `doc/build/orm/queryguide/columns.rst:857` sync — refused: `sqlalchemy.union_all()` at `doc/build/orm/queryguide/columns.rst:868` #### Asynchronous I/O (asyncio) (`doc/build/orm/extensions/asyncio.rst`) - `doc/build/orm/extensions/asyncio.rst:63` async — refused: conn.run_sync(fn): only `run_sync(Base.metadata.create_all)` is supported (its DDL is compiled at tr at `doc/build/orm/extensions/asyncio.rst:76` - `doc/build/orm/extensions/asyncio.rst:170` async — refused: conn.run_sync(fn): only `run_sync(Base.metadata.create_all)` is supported (its DDL is compiled at tr at `doc/build/orm/extensions/asyncio.rst:76` #### Special Relationship Persistence Patterns (`doc/build/orm/relationship_persistence.rst`) - `doc/build/orm/relationship_persistence.rst:105` async — refused: option primaryjoin= is not supported at `doc/build/orm/relationship_persistence.rst:92` - `doc/build/orm/relationship_persistence.rst:105` sync — refused: option primaryjoin= is not supported at `doc/build/orm/relationship_persistence.rst:92` #### Association Proxy (`doc/build/orm/extensions/associationproxy.rst`) - `doc/build/orm/extensions/associationproxy.rst:592` async — refused: annotate with Mapped[...] at `doc/build/orm/extensions/associationproxy.rst:548` - `doc/build/orm/extensions/associationproxy.rst:592` sync — refused: annotate with Mapped[...] at `doc/build/orm/extensions/associationproxy.rst:548` #### Hybrid Attributes (`lib/sqlalchemy/ext/hybrid.py`) - `lib/sqlalchemy/ext/hybrid.py:735` async — refused: @word_insensitive.inplace.comparator is not supported (a hybrid's expression and setter only) at `lib/sqlalchemy/ext/hybrid.py:725` - `lib/sqlalchemy/ext/hybrid.py:735` sync — refused: @word_insensitive.inplace.comparator is not supported (a hybrid's expression and setter only) at `lib/sqlalchemy/ext/hybrid.py:725` - `lib/sqlalchemy/ext/hybrid.py:922` async — refused: @dataclass(eq=) is not supported (CaseInsensitiveWord) at `lib/sqlalchemy/ext/hybrid.py:885` - `lib/sqlalchemy/ext/hybrid.py:922` sync — refused: @dataclass(eq=) is not supported (CaseInsensitiveWord) at `lib/sqlalchemy/ext/hybrid.py:885` - `lib/sqlalchemy/ext/hybrid.py:934` async — refused: @dataclass(eq=) is not supported (CaseInsensitiveWord) at `lib/sqlalchemy/ext/hybrid.py:885` - `lib/sqlalchemy/ext/hybrid.py:934` sync — refused: @dataclass(eq=) is not supported (CaseInsensitiveWord) at `lib/sqlalchemy/ext/hybrid.py:885` - `lib/sqlalchemy/ext/hybrid.py:1052` async — refused: @dataclass(eq=) is not supported (Point) at `lib/sqlalchemy/ext/hybrid.py:990` - `lib/sqlalchemy/ext/hybrid.py:1052` sync — refused: @dataclass(eq=) is not supported (Point) at `lib/sqlalchemy/ext/hybrid.py:990`