cjc0013's picture
Publish SQLAlchemy backlog intelligence Space
6a437f0 verified
Raw
History Blame Contribute Delete
76.8 kB
<style>
:root { color-scheme: light; }
.bi-wrap { font-family: Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif; color: #1f2328 !important; }
.bi-wrap h1, .bi-wrap h2, .bi-wrap h3, .bi-wrap p, .bi-wrap strong, .bi-wrap td, .bi-wrap th, .bi-wrap div { color: #1f2328 !important; }
.bi-band { border: 1px solid #d8dee4; border-radius: 8px; background: #ffffff !important; padding: 16px; margin: 0 0 12px; }
.bi-title { display: flex; gap: 12px; align-items: flex-start; justify-content: space-between; margin-bottom: 12px; }
.bi-title h1, .bi-title h2 { margin: 0; line-height: 1.15; letter-spacing: 0; }
.bi-title h1 { font-size: 1.55rem; }
.bi-title h2 { font-size: 1.12rem; }
.bi-title p { margin: 4px 0 0; color: #57606a; max-width: 820px; }
.status-pill { border-radius: 999px; padding: 5px 9px; font-size: .78rem; font-weight: 700; background: #dafbe1; color: #116329 !important; white-space: nowrap; }
.metric-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(138px, 1fr)); gap: 8px; }
.metric { border: 1px solid #d0d7de; border-radius: 8px; padding: 10px; background: #f6f8fa !important; min-height: 86px; }
.metric-value { font-size: 1.45rem; font-weight: 800; line-height: 1.1; color: #0969da !important; }
.metric-label { margin-top: 4px; font-size: .84rem; font-weight: 700; }
.metric-note { margin-top: 2px; font-size: .76rem; color: #57606a !important; }
.callout-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 8px; }
.callout { border-left: 4px solid #0969da; background: #f6f8fa !important; border-radius: 8px; padding: 10px 12px; }
.callout:nth-child(2) { border-left-color: #1a7f37; }
.callout:nth-child(3) { border-left-color: #bf8700; }
.callout:nth-child(4) { border-left-color: #cf222e; }
.callout strong { display: block; margin-bottom: 4px; }
.group-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(310px, 1fr)); gap: 10px; }
.group-card { border: 1px solid #d8dee4; border-radius: 8px; padding: 12px; background: #fff !important; }
.group-card h3 { margin: 0 0 7px; font-size: 1rem; line-height: 1.25; letter-spacing: 0; }
.meta-row { display: flex; flex-wrap: wrap; gap: 6px; margin: 6px 0; }
.chip-row { display: inline-flex; flex-wrap: wrap; gap: 5px; align-items: center; vertical-align: middle; }
.chip { display: inline-flex; align-items: center; border: 1px solid #d0d7de; border-radius: 999px; padding: 2px 7px; font-size: .78rem; background: #f6f8fa !important; color: #24292f !important; }
.chip.bucket { border-color: #9a6700; background: #fff8c5 !important; }
.chip.kind { border-color: #0969da; background: #ddf4ff !important; }
.workflow-grid { display: grid; grid-template-columns: repeat(auto-fit, minmax(260px, 1fr)); gap: 10px; }
.workflow-card { border: 1px solid #d8dee4; border-radius: 8px; padding: 12px; background: #fff !important; }
.workflow-card h3 { margin: 0 0 7px; font-size: 1rem; line-height: 1.25; letter-spacing: 0; }
.workflow-card .move-count { font-weight: 800; color: #0969da !important; }
.move-list { display: grid; gap: 10px; }
.move-row { border: 1px solid #d8dee4; border-radius: 8px; background: #fff !important; }
.move-row summary { list-style: none; cursor: pointer; padding: 12px; }
.move-row summary::-webkit-details-marker { display: none; }
.move-summary { display: grid; grid-template-columns: minmax(190px, 1.1fr) minmax(220px, 1.35fr) minmax(220px, 1.35fr) minmax(120px, .7fr) minmax(100px, .55fr) minmax(220px, 1.25fr) auto; gap: 10px; align-items: start; }
.move-title h3 { margin: 0 0 4px; font-size: 1rem; line-height: 1.25; letter-spacing: 0; }
.move-field span { display: block; color: #57606a !important; font-size: .72rem; font-weight: 800; text-transform: uppercase; letter-spacing: .02em; }
.move-field p { margin: 3px 0 0; font-size: .84rem; line-height: 1.35; }
.view-bundles { align-self: center; justify-self: end; border: 1px solid #000000; border-radius: 999px; color: #000000 !important; background: #ffffff !important; padding: 4px 9px; font-size: .78rem; font-weight: 800; white-space: nowrap; }
.move-row[open] .view-bundles { background: #f6f8fa !important; }
.move-expanded { border-top: 1px solid #d8dee4; padding: 0 12px 12px; }
.bundle-row { border-top: 1px solid #eef1f4; padding: 12px 0; }
.bundle-row:first-child { border-top: none; }
.bundle-row h4 { margin: 0 0 6px; font-size: .94rem; line-height: 1.25; letter-spacing: 0; }
.bundle-scope { display: grid; grid-template-columns: repeat(auto-fit, minmax(220px, 1fr)); gap: 7px; margin-top: 8px; }
.evidence-list { margin: 8px 0 0 18px; padding: 0; color: #57606a !important; font-size: .82rem; line-height: 1.35; }
.evidence-list li { margin: 3px 0; }
.muted { color: #57606a !important; }
.evidence { font-size: .84rem; color: #57606a !important; }
.scroll-table { overflow-x: auto; border: 1px solid #d8dee4; border-radius: 8px; background: #fff !important; }
table.bi-table { width: 100%; border-collapse: collapse; font-size: .86rem; }
.bi-table th { text-align: left; background: #f6f8fa !important; color: #57606a !important; font-size: .78rem; border-bottom: 1px solid #d8dee4; padding: 8px; white-space: nowrap; }
.bi-table td { border-bottom: 1px solid #eef1f4; padding: 8px; vertical-align: top; min-width: 86px; }
.bi-table tr:last-child td { border-bottom: none; }
.wide { min-width: 280px; }
.tight { max-width: 180px; }
a { color: #0969da !important; text-decoration: none; }
a:hover { text-decoration: underline; }
.bi-wrap, .bi-wrap * { color: #000000 !important; }
@media (max-width: 720px) {
.bi-title { display: block; }
.status-pill { display: inline-block; margin-top: 8px; }
.group-grid { grid-template-columns: 1fr; }
.move-summary { grid-template-columns: 1fr; }
.view-bundles { justify-self: start; }
}
</style>
<div class='bi-wrap'><section class='bi-band'><div class='bi-title'><div><h2>Open Issues</h2><p>Public-safe normalized rows for auditability.</p></div></div><div class='scroll-table'><table class='bi-table'><thead><tr><th>Issue</th><th>Bucket</th><th>Score</th><th>Linked</th><th>Labels</th><th>Excerpt</th></tr></thead><tbody><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/13420' target='_blank' rel='noopener noreferrer'>Issue #13420: oracledb async dialect enters cursors synchronously, silently breaking async cursor wrappers</a></td><td>has linked PR</td><td>44</td><td><span class='chip-row'><span class='chip'>PR #13421</span></span></td><td>bug, task, oracle, asyncio</td><td><div class='wide'>### Describe the use case ### AsyncAdapt_oracledb_cursor._aenter_cursor uses sync __enter__() instead of async __aenter__() **Where:** https://github.com/sqlalchemy/sqlalchemy/blob/c8e26d5c9ffcde0a82b4b7fa5de27f0c6bc46bec/lib/sqlalchemy/dialects/oracle/oracledb.py#L754-L758 Compare to the base class it overrides, wh...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/13419' target='_blank' rel='noopener noreferrer'>Issue #13419: catastrophic regex backtracking in sqlite inline UNIQUE reflection (ReDoS on get_unique_constraints)</a></td><td>has linked PR</td><td>44</td><td><span class='chip-row'><span class='chip'>PR #13398</span></span></td><td>bug, reflection</td><td><div class='wide'>### Describe the bug `get_unique_constraints` on the SQLite dialect scans the stored `CREATE TABLE` text (taken verbatim from `sqlite_master.sql`) with an inline-`UNIQUE` regex whose tail is `[\t ]+[a-z0-9_ ]+?[\t ]+UNIQUE`. The lazy middle class itself contains a space, so all three quantifiers can lay claim to the...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/13407' target='_blank' rel='noopener noreferrer'>Issue #13407: Cython batch instance processor — ~10–30% on most loads</a></td><td>has linked PR</td><td>44</td><td><span class='chip-row'><span class='chip'>PR #13405</span></span></td><td>orm, performance</td><td><div class='wide'>### Discussed in https://github.com/sqlalchemy/sqlalchemy/discussions/13378 &lt;div type=&#x27;discussions-op-text&#x27;&gt; &lt;sup&gt;Originally posted by **ollz272** June 16, 2026&lt;/sup&gt; Add `orm/_loading_cy.py` with `_InstancesBatch`, a whole-chunk row processor built by `_instance_processor()` for the non-refresh, non-polymorphic loa...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/13406' target='_blank' rel='noopener noreferrer'>Issue #13406: use new _raw_all_tuples with subqueryloads</a></td><td>has linked PR</td><td>44</td><td><span class='chip-row'><span class='chip'>PR #13404</span></span></td><td>orm, performance</td><td><div class='wide'>### Discussed in https://github.com/sqlalchemy/sqlalchemy/discussions/13375 &lt;div type=&#x27;discussions-op-text&#x27;&gt; &lt;sup&gt;Originally posted by **ollz272** June 16, 2026&lt;/sup&gt; `_SubqCollections._load` iterated the `Query`, which routes through `Query.__iter__ -&gt; result.unique()` and builds a `Row` object (plus runs the uniqu...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/13357' target='_blank' rel='noopener noreferrer'>Issue #13357: Type check error when passing lists to `any_`/`all_`</a></td><td>needs maintainer decision</td><td>28</td><td><span class='chip-row'><span class='muted'>none</span></span></td><td>documentation, functions, typing</td><td><div class='wide'>### Ensure stubs packages are not installed - [x] No sqlalchemy stub packages is installed (both `sqlalchemy-stubs` and `sqlalchemy2-stubs` are not compatible with v2) ### Verify if the api is typed - [x] The api is not in a module listed in [#6810](https://github.com/sqlalchemy/sqlalchemy/issues/6810) so it should...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/13311' target='_blank' rel='noopener noreferrer'>Issue #13311: Provide a many-table version for has_table</a></td><td>needs maintainer decision</td><td>28</td><td><span class='chip-row'><span class='muted'>none</span></span></td><td>reflection, performance, use case</td><td><div class='wide'>### Describe the use case This could be used for example to speed-up the check done by the `create_all` metadata something similar to the multi-reflection api, the method could be called `has_multi_table` discussed in #13295 ### Databases / Backends / Drivers targeted any ### Example Use ```py inspect(conn).has_muti...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/13281' target='_blank' rel='noopener noreferrer'>Issue #13281: Modernize type annotations to PEP 604 union syntax</a></td><td>needs maintainer decision</td><td>28</td><td><span class='chip-row'><span class='muted'>none</span></span></td><td>typing</td><td><div class='wide'>## Summary SQLAlchemy now targets Python &gt;= 3.10, so legacy `typing.Union` and `typing.Optional` annotations can be modernized to PEP 604 union syntax. Examples: - `Optional[T]` -&gt; `T | None` - `Union[A, B]` -&gt; `A | B` - `typing.Optional[T]` -&gt; `T | None` - `typing.Union[A, B]` -&gt; `A | B` ## Scope Audit and update P...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/13253' target='_blank' rel='noopener noreferrer'>Issue #13253: im not sure we can type hybrid_methods fully</a></td><td>needs maintainer decision</td><td>28</td><td><span class='chip-row'><span class='muted'>none</span></span></td><td>bug, quagmire, typing</td><td><div class='wide'>### Discussed in https://github.com/sqlalchemy/sqlalchemy/discussions/13249 trying to do this, cannot get any typing combination to be accepted by pyright much less mypy: ```py from typing import overload from sqlalchemy import func, Integer, column from sqlalchemy import select from sqlalchemy.ext.hybrid import hyb...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/13227' target='_blank' rel='noopener noreferrer'>Issue #13227: WriteOnlyMapped: default_factory=list broken in 2.1 due to new declarative_scan validation</a></td><td>has linked PR</td><td>44</td><td><span class='chip-row'><span class='chip'>PR #13289</span></span></td><td>orm, use case</td><td><div class='wide'>### Describe the bug The new `default_factory` validation introduced in commit [95ad9fe](https://github.com/sqlalchemy/sqlalchemy/commit/95ad9fe42b888d7cdea60b7a71c833cbb8667887) (related to #12168) breaks `WriteOnlyMapped` relationships that use `default_factory=list` in Declarative Dataclass Mapping. ### Optional...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/13212' target='_blank' rel='noopener noreferrer'>Issue #13212: Support for native JSON in mssql</a></td><td>needs maintainer decision</td><td>28</td><td><span class='chip-row'><span class='muted'>none</span></span></td><td>SQL Server, datatypes, use case</td><td><div class='wide'>### Describe the use case Sql server 2025 seems to have added native json support https://learn.microsoft.com/en-us/sql/t-sql/data-types/json-data-type?view=sql-server-ver17 I guess we should decide what to do with the existing JSON type: https://docs.sqlalchemy.org/en/20/dialects/mssql.html#sqlalchemy.dialects.mssq...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/13210' target='_blank' rel='noopener noreferrer'>Issue #13210: Applying a loader option to a parent relationship when using with_polymorphic does not work properly</a></td><td>needs maintainer decision</td><td>28</td><td><span class='chip-row'><span class='muted'>none</span></span></td><td>bug, orm, loader options</td><td><div class='wide'>&gt; Asked claude to fuzz this and it did find a similar case, let me know if you prefer me to open another issue or if we should re-open this one. Seem very similar: it accesses the parent relationship via `poly.Cls.parent_rel` that&#x27;s similar to what was fixed here `poly.Cls.cls_rel` &gt; &gt; while strange I think it shoul...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/13204' target='_blank' rel='noopener noreferrer'>Issue #13204: Immediateload fails to load when combined with inheritance</a></td><td>needs maintainer decision</td><td>28</td><td><span class='chip-row'><span class='muted'>none</span></span></td><td>bug, orm, loader options, fuzzer</td><td><div class='wide'>There are a couple of cases where immediateload fails when using inheritance on relationships: - loading using immediateload a relationship on an inheritance chain that&#x27;s being loaded via eager loading: `select(Meta).option(anyloader(Meta.parent_cls).immediateload(ParentCls.relationship))` - loading using immediatel...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/13169' target='_blank' rel='noopener noreferrer'>Issue #13169: Connection pool soft invalidation uses `time.time()` comparison that can silently fail on low-resolution clocks (e.g. Windows ~16 ms)</a></td><td>has linked PR</td><td>44</td><td><span class='chip-row'><span class='chip'>PR #13288</span></span></td><td>connection pool, use case</td><td><div class='wide'>In `lib/sqlalchemy/pool/base.py`, `_ConnectionRecord.get_connection` detects soft invalidation via: ```python # base.py, line 852 elif self._soft_invalidate_time &gt; self.starttime: do_connect = True ``` `_soft_invalidate_time` is set with `time.time()` (line 812) and `starttime` is also set with `time.time()` (line 8...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/13157' target='_blank' rel='noopener noreferrer'>Issue #13157: PostgreSQL check constraint reflection strips brackets naively</a></td><td>has linked PR</td><td>62</td><td><span class='chip-row'><span class='chip'>PR #13303</span></span></td><td>bug, postgresql, reflection, great mcve</td><td><div class='wide'>### Describe the bug Check constraint reflection strips brackets from some expressions such that they are syntactically invalid ### Optional link from https://docs.sqlalchemy.org which documents the behavior that is expected _No response_ ### SQLAlchemy Version in Use 2.0.48 ### DBAPI (i.e. the database driver) psyc...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/13153' target='_blank' rel='noopener noreferrer'>Issue #13153: `composite` with in-place custom values getter</a></td><td>needs maintainer decision</td><td>28</td><td><span class='chip-row'><span class='muted'>none</span></span></td><td>orm, use case</td><td><div class='wide'>### Describe the use case Currently, nested composites or custom classes require implementing `__composite_values__`, which is not always an option. Internally there is `_generated_composite_accessor` which is generated if no such method provided. I suggest adding `values_getter` as an argument to `composite()` so i...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/13113' target='_blank' rel='noopener noreferrer'>Issue #13113: SQLite insert supports multiple on-conflict clauses in inserts</a></td><td>needs maintainer decision</td><td>28</td><td><span class='chip-row'><span class='muted'>none</span></span></td><td>sqlite, use case, dml</td><td><div class='wide'>### Describe the use case Apparently sqlite supports multiple on-conflict clauses in inserts: https://sqlite.org/lang_upsert.html &gt; If the insert operation would cause the conflict target uniqueness constraint to fail, then the insert is omitted and the corresponding DO NOTHING or DO UPDATE operation is performed in...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/13049' target='_blank' rel='noopener noreferrer'>Issue #13049: Provide an implementation for avg / abs function with proper type</a></td><td>has linked PR</td><td>44</td><td><span class='chip-row'><span class='chip'>PR #13051</span></span></td><td>functions, use case</td><td><div class='wide'>### Describe the use case Currently `avg` and `abs` do not have an implementation in the functions module Since these are fairly common i thing we could provide an implementation so that the correct type can be inferred. - avg is numeric (or Double) - abs instead derives its type from the input ### Databases / Backe...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/13048' target='_blank' rel='noopener noreferrer'>Issue #13048: Add option for disabling automatic addition of constraint/indexes to the table</a></td><td>has linked PR</td><td>44</td><td><span class='chip-row'><span class='chip'>PR #13399</span></span></td><td>schema, use case</td><td><div class='wide'>### Describe the use case Add a flag in the constraints and index to prevent them from automatically being added to the table collections. They can be added manually either by providing them to the table constructor or using the table methods to add constraints ### Databases / Backends / Drivers targeted Any ### Exa...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/13007' target='_blank' rel='noopener noreferrer'>Issue #13007: Change the default to False of addconstraint / dropconstraint isolate_from_table</a></td><td>stale/low urgency</td><td>2</td><td><span class='chip-row'><span class='muted'>none</span></span></td><td>schema, use case</td><td><div class='wide'>Follow up of #13006 Set to False the default value and remove the warning</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/12972' target='_blank' rel='noopener noreferrer'>Issue #12972: Move asyncio out of ext into the library proper</a></td><td>stale/low urgency</td><td>2</td><td><span class='chip-row'><span class='muted'>none</span></span></td><td>use case, asyncio</td><td><div class='wide'>a long term solution would be to pull the asyncio extension out of the .ext/ namespace so that the imports would be `from sqlalchemy.asyncio import create_async_engine` and `from sqlalchemy.orm.asycnio import AsyncSession`. Then `sqlalchemy.ext.asyncio` would be a compatibility shim that isn&#x27;t needed, the same way D...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/12803' target='_blank' rel='noopener noreferrer'>Issue #12803: Expose Two Phase Transaction in async layer</a></td><td>stale/low urgency</td><td>2</td><td><span class='chip-row'><span class='muted'>none</span></span></td><td>use case, asyncio</td><td><div class='wide'>### Discussed in https://github.com/sqlalchemy/sqlalchemy/discussions/12797 &lt;div type=&#x27;discussions-op-text&#x27;&gt; &lt;sup&gt;Originally posted by **OscarRomaFever** August 12, 2025&lt;/sup&gt; Hi! I would like to know if it is possible to manage a Two-Phase Commit (2PC) transaction using asynchronous connections with PostgreSQL in S...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/12710' target='_blank' rel='noopener noreferrer'>Issue #12710: add extra shielding to async connection create</a></td><td>stale/low urgency</td><td>2</td><td><span class='chip-row'><span class='muted'>none</span></span></td><td>bug, engine, asyncio</td><td><div class='wide'>### Discussed in https://github.com/sqlalchemy/sqlalchemy/discussions/12709 Locally I can only reproduce this using a trusted connection against a PG database running in a local container, which I can run like this: podman run -d --rm -e POSTGRES_HOST_AUTH_METHOD=trust -e POSTGRES_USER=postgres -e POSTGRES_PASSWORD=...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/12689' target='_blank' rel='noopener noreferrer'>Issue #12689: WriteOnlyScalar companion to WriteOnlyMapped (which would be Collection?) , as WOM suits an async use case that applies to scalars as well</a></td><td>stale/low urgency</td><td>2</td><td><span class='chip-row'><span class='muted'>none</span></span></td><td>orm, use case</td><td><div class='wide'>### Describe the use case Traditional strategies (&#x27;select&#x27;, &#x27;raise&#x27;, &#x27;subquery&#x27;) for accessing a lazy-loaded relationship relationship don&#x27;t work in an async context, as the database call loading the related instance yields to the event loop before a necessarily synchronous attribute access would otherwise return. T...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/12628' target='_blank' rel='noopener noreferrer'>Issue #12628: Add support for MariaDB Vector data type</a></td><td>stale/low urgency</td><td>2</td><td><span class='chip-row'><span class='muted'>none</span></span></td><td>oracle, datatypes, use case, mariadb</td><td><div class='wide'>### Describe the use case MariaDB has introduced a new Vector data type in version 11.7. Details can be found here: https://mariadb.org/projects/mariadb-vector/ The main issue I&#x27;m running into now is that reflection fails when reflecting on any table that has a vector column. The reflection fails to retrieve the col...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/12585' target='_blank' rel='noopener noreferrer'>Issue #12585: support SQLite .autocommit=False mode, improve documentation</a></td><td>stale/low urgency</td><td>2</td><td><span class='chip-row'><span class='muted'>none</span></span></td><td>task, sqlite, big job</td><td><div class='wide'>### Describe the use case see https://docs.python.org/3/library/sqlite3.html#sqlite3.Connection.autocommit for the new feature (which was many years in the making) from discussion at https://github.com/sqlalchemy/alembic/issues/1655 : 1. SQLAlchemy&#x27;s documentation needs to be updated to reflect that the &quot;correct tra...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/12575' target='_blank' rel='noopener noreferrer'>Issue #12575: prefixing Composite Column Types</a></td><td>stale/low urgency</td><td>2</td><td><span class='chip-row'><span class='muted'>none</span></span></td><td>orm, use case</td><td><div class='wide'>### Describe the use case ```python @dataclasses.dataclass class Person: first_name: int last_name: str # ... class Housing(Base): person: composite(Person, column_prefix=&#x27;person&#x27;) ``` would result in mapped column names `person_first_name` and `person_last_name` right now, the API is a bit verbose and hard to read:...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/12561' target='_blank' rel='noopener noreferrer'>Issue #12561: Recover two-phase in mysql is currently unusable since it uses a legacy row index method</a></td><td>stale/low urgency</td><td>2</td><td><span class='chip-row'><span class='muted'>none</span></span></td><td>bug, mysql, mariadb</td><td><div class='wide'>This has likely been broken since v2 https://github.com/sqlalchemy/sqlalchemy/blob/a84444fca1c436179ad847ce99e8a013a84b5b33/lib/sqlalchemy/dialects/mysql/base.py#L2772-L2774 Apparently there is no test that covers this</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/12398' target='_blank' rel='noopener noreferrer'>Issue #12398: Add existing strategy to conflicting strategies error message</a></td><td>has linked PR</td><td>26</td><td><span class='chip-row'><span class='chip'>PR #12401</span></span></td><td>orm, use case</td><td><div class='wide'>### Describe the use case I just received the following error of in my project and have an improvement request similar to #10668 : ``` sqlalchemy.exc.InvalidRequestError: Loader strategies for ORM Path[Mapper[Cable(cable)] -&gt; Cable.cablesides -&gt; Mapper[CadCableSide(cad_cable_side)]] conflict ``` While this tells me...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/12341' target='_blank' rel='noopener noreferrer'>Issue #12341: Add dialect-specific support for Oracle&#x27;s FETCH EXACT/APPROXIMATE</a></td><td>stale/low urgency</td><td>2</td><td><span class='chip-row'><span class='muted'>none</span></span></td><td>oracle, use case</td><td><div class='wide'>### Discussed in https://github.com/sqlalchemy/sqlalchemy/discussions/12337 support for FETCH EXACT/APPROXIMATE feature described at https://docs.oracle.com/en/database/oracle/oracle-database/23/sqlrf/SELECT.html#GUID-CFA006CA-6FF1-4972-821E-6996142A51C6__BABBADDD</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/12186' target='_blank' rel='noopener noreferrer'>Issue #12186: Improve `eager_default=True` behavior in insert / updates</a></td><td>stale/low urgency</td><td>2</td><td><span class='chip-row'><span class='muted'>none</span></span></td><td>orm, unit of work, use case, eager_defaults</td><td><div class='wide'>## update Currently `eager_default=True` in case of an update of multiple rows does the following: - when the driver supports returning, runs single updates with returning, one for each row. Results in n queries - when the driver does not support returning, runs execute many updates and one select for each rows. Res...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/12101' target='_blank' rel='noopener noreferrer'>Issue #12101: Better support of locking clauses (FOR UPDATE/SHARE) when supported</a></td><td>needs maintainer decision</td><td>28</td><td><span class='chip-row'><span class='muted'>none</span></span></td><td>postgresql, oracle, use case</td><td><div class='wide'>### Describe the use case The [Postgres docs](https://www.postgresql.org/docs/17/sql-select.html) specifically say that you should be able to have both a FOR UPDATE and a FOR SHARE in the same query: &gt; Multiple locking clauses can be written if it is necessary to specify different locking behavior for different tabl...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/12097' target='_blank' rel='noopener noreferrer'>Issue #12097: can&#x27;t adapt type for enum in case()</a></td><td>stale/low urgency</td><td>2</td><td><span class='chip-row'><span class='muted'>none</span></span></td><td>question, documentation, expected behavior, law of twos</td><td><div class='wide'>### Describe the bug I can&#x27;t use an enum type as part of a `case()` without casting. Looks very similar to https://github.com/sqlalchemy/sqlalchemy/issues/6515 ### Optional link from https://docs.sqlalchemy.org which documents the behavior that is expected _No response_ ### SQLAlchemy Version in Use 2.0.36 ### DBAPI...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/12096' target='_blank' rel='noopener noreferrer'>Issue #12096: delete with join and returning clause doesn&#x27;t work on SQLAlchemy 2</a></td><td>stale/low urgency</td><td>2</td><td><span class='chip-row'><span class='muted'>none</span></span></td><td>bug, orm, hard orm, dml</td><td><div class='wide'>### Describe the bug I have a statement like the following, which works on SQLAlchemy 1.4 but not on 2.0 ```python delete(Author).where(Author.id == Book.author_id).returning(Book.title) ``` ### Optional link from https://docs.sqlalchemy.org which documents the behavior that is expected https://docs.sqlalchemy.org/e...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/11686' target='_blank' rel='noopener noreferrer'>Issue #11686: Unexpected relationship kwarg with mypy from a mixin</a></td><td>stale/low urgency</td><td>2</td><td><span class='chip-row'><span class='muted'>none</span></span></td><td>dataclasses, typing</td><td><div class='wide'>### Ensure stubs packages are not installed - [X] No sqlalchemy stub packages is installed (both `sqlalchemy-stubs` and `sqlalchemy2-stubs` are not compatible with v2) ### Verify if the api is typed - [X] The api is not in a module listed in [#6810](https://github.com/sqlalchemy/sqlalchemy/issues/6810) so it should...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/11677' target='_blank' rel='noopener noreferrer'>Issue #11677: SQLITE: SQLiteDialect.get_check_constraints incorrectly reflects multiline check constraints</a></td><td>stale/low urgency</td><td>2</td><td><span class='chip-row'><span class='muted'>none</span></span></td><td>bug, sqlite, reflection, quagmire, law of twos</td><td><div class='wide'>### Describe the bug The `get_check_constraints` method of SQLiteDialect, does not correctly handle multi line CHECK constraints in SQLAlchemy reflection. When performing a alembic batch_op for example, multi line check constraints will not be or wrongly reflected and can result in SQL errors. ### Optional link from...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/11623' target='_blank' rel='noopener noreferrer'>Issue #11623: omit column_property from rendering inside subquery() / CTE() ?</a></td><td>stale/low urgency</td><td>2</td><td><span class='chip-row'><span class='muted'>none</span></span></td><td>orm, performance, expected behavior</td><td><div class='wide'>### Describe the bug Given a model `A` with a column_property `B`, a query that loads an `aliased` of `A` will emit the `B` expression multiple times (exact number depends on the complexity of the query). ### Optional link from https://docs.sqlalchemy.org which documents the behavior that is expected _No response_ #...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/11620' target='_blank' rel='noopener noreferrer'>Issue #11620: Deprecate MSSQL enable_identity_insert by default, gate it behind a flag</a></td><td>has linked PR</td><td>44</td><td><span class='chip-row'><span class='chip'>PR #12297</span></span></td><td>sql, SQL Server, fairly easy</td><td><div class='wide'>Discussed in #11613 Add a boolean flag in the mssql dialect, the default will be set to `warn` meaning that a warning will be raised when `_enable_identity_insert` is detected set to true. User can opt into the current behaviour or disable it</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/11597' target='_blank' rel='noopener noreferrer'>Issue #11597: sqltypes.Enum not generic enough</a></td><td>stale/low urgency</td><td>2</td><td><span class='chip-row'><span class='muted'>none</span></span></td><td>bug, datatypes, typing</td><td><div class='wide'>### Discussed in https://github.com/sqlalchemy/sqlalchemy/discussions/11548 The generic type for `Enum` needs to be a typevar for pyright: ```py from __future__ import annotations import enum from sqlalchemy import Enum from sqlalchemy import func from sqlalchemy.orm import column_property from sqlalchemy.orm import...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/11536' target='_blank' rel='noopener noreferrer'>Issue #11536: support module-qualified paths inside of Mapped[], including with/without future mode / pep563 etc</a></td><td>stale/low urgency</td><td>2</td><td><span class='chip-row'><span class='muted'>none</span></span></td><td>orm, use case, orm - annotated declarative</td><td><div class='wide'>### Describe the bug When using PEP563 postponed annotations (i.e. `from __future__ import annotations`), mapped classes with the same name in different modules cannot be used in relationships using type annotations alone. For example, if `mod1` and `mod2` both contain mapped classes called `Model`, then `attr: Mapp...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/11385' target='_blank' rel='noopener noreferrer'>Issue #11385: Add additional information to the `ReflectedColumn`</a></td><td>stale/low urgency</td><td>2</td><td><span class='chip-row'><span class='muted'>none</span></span></td><td>reflection, use case</td><td><div class='wide'>The reflected column dict https://docs.sqlalchemy.org/en/20/core/reflection.html#sqlalchemy.engine.interfaces.ReflectedColumn includes only the already reflected type instance from the dialect. This means that for unknown sql types, the sqlalchemy nulltype is provided, losing any information about what was reflected...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/11312' target='_blank' rel='noopener noreferrer'>Issue #11312: reflecting oracle synonym of synonym over dblink</a></td><td>good volunteer slice</td><td>20</td><td><span class='chip-row'><span class='muted'>none</span></span></td><td>oracle, reflection, PRs (with tests!) welcome</td><td><div class='wide'>### Describe the bug I get a table not found error when trying to reflect a synonym of a synonym on a dblink. I try reflecting the table as such ``` self._engine = sql.create_engine(uri, echo=&#x27;debug&#x27;) sql.Table(table_name, self._metadata, schema=self._schema, autoload_with=self._engine, oracle_resolve_synonyms=True)...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/11284' target='_blank' rel='noopener noreferrer'>Issue #11284: Missing batch_op.f()</a></td><td>stale/low urgency</td><td>2</td><td><span class='chip-row'><span class='muted'>none</span></span></td><td>bug, documentation, tests, schema</td><td><div class='wide'>### Discussed in https://github.com/sqlalchemy/alembic/discussions/1458 the [conv](https://docs.sqlalchemy.org/en/20/core/constraints.html#sqlalchemy.schema.conv) construct applies truncation rules to identifiers, and users are using it this way. We can&#x27;t change that, so document it and ensure unit tests are present...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/11136' target='_blank' rel='noopener noreferrer'>Issue #11136: Delete Propagation to Parent Table for Joined Table Inheritance</a></td><td>waiting on contributor</td><td>0</td><td><span class='chip-row'><span class='muted'>none</span></span></td><td>awaiting info, use case</td><td><div class='wide'>### Describe the use case When a polymorphic table is created via joined table inheritance, I would expect that deleting a row in the subclass table would also delete the row in the parent table. I&#x27;ve found that when the subclass row is explicitly deleted, the delete propgates to the parent table as I would expect....</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/11132' target='_blank' rel='noopener noreferrer'>Issue #11132: MySQL DOUBLE accepts deprecated params that dont propagate from the base DOUBLE type, document this caveat</a></td><td>has linked PR</td><td>44</td><td><span class='chip-row'><span class='chip'>PR #13368</span></span></td><td>documentation, mysql, datatypes, PRs (with tests!) welcome</td><td><div class='wide'>### Describe the bug Hi im trying to get startet with sql alchemy and alembic and just found a bug. during the translation of a double precision=17, and decimal_return_scale=7 into mysql i always get an exception. `sqlalchemy.exc.ArgumentError: You must specify both precision and scale or omit both altogether.` When...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/11122' target='_blank' rel='noopener noreferrer'>Issue #11122: Postregresql create table add &quot;with&quot; argument</a></td><td>has linked PR</td><td>44</td><td><span class='chip-row'><span class='chip'>PR #11296</span></span></td><td>postgresql, PRs (with tests!) welcome, use case</td><td><div class='wide'>### Describe the use case In postgresql documentation (https://www.postgresql.org/docs/current/sql-createtable.html) create table have the &quot;with&quot; option that is not supported by sqlalchemy currently. The change is simple: https://github.com/sqlalchemy/sqlalchemy/commit/45b70d4e7c0ac31005f8a93253fe477dfc27afb4 ### Da...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/11062' target='_blank' rel='noopener noreferrer'>Issue #11062: Could not de-stringify annotation</a></td><td>stale/low urgency</td><td>2</td><td><span class='chip-row'><span class='muted'>none</span></span></td><td>documentation, orm, orm - annotated declarative</td><td><div class='wide'>### Describe the bug Hey, the following code raises an `NameError: Could not de-stringify annotation &#x27;long str&#x27;`. But as soon as I changed `Annotated[str, &quot;long str&quot;]` to `Annotated[str, &quot;long_str&quot;]` it works. Any idea about what&#x27;s going on here? fin swimmer ### Optional link from https://docs.sqlalchemy.org which d...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/10960' target='_blank' rel='noopener noreferrer'>Issue #10960: &quot;implicit combining column&quot; warning not emitting for two columns from two different aliases against same parent table</a></td><td>stale/low urgency</td><td>2</td><td><span class='chip-row'><span class='muted'>none</span></span></td><td>bug, orm</td><td><div class='wide'>### Describe the bug ## Description The following code yields a strange result. I&#x27;m expecting `bar_1`, `bar_2`, and `bar_3` to be mapped as `CompositeBar(value_1=&quot;a&quot;, value_2=&quot;b&quot;)`, `CompositeBar(value_1=&quot;c&quot;, value_2=&quot;d&quot;)`, and `CompositeBar(value_1=&quot;e&quot;, value_2=&quot;f&quot;)` respectively, but actually it ended up with ever...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/10936' target='_blank' rel='noopener noreferrer'>Issue #10936: post_update double UPDATE on delete of object with bi-directional</a></td><td>stale/low urgency</td><td>2</td><td><span class='chip-row'><span class='muted'>none</span></span></td><td>bug, quagmire, unit of work, post-update</td><td><div class='wide'>### Discussed in https://github.com/sqlalchemy/sqlalchemy/discussions/10934 looks like this was never tested. might not have an immediate solution ```py def test_no_double_update_on_delete_bidirectional_post_update(self): person, ball, Ball, Person = ( self.tables.person, self.tables.ball, self.classes.Ball, self.cl...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/10888' target='_blank' rel='noopener noreferrer'>Issue #10888: OrderingList typing incorrect / incomplete and implementation doesn&#x27;t accept non-int indices</a></td><td>good volunteer slice</td><td>20</td><td><span class='chip-row'><span class='muted'>none</span></span></td><td>sqlalchemy.ext, PRs (with tests!) welcome, typing</td><td><div class='wide'>### Describe the bug There are a number of issues with the sqlalchemy.ext.orderinglist:OrderingList type hints and implementation: 1. The ordering function is documented as being allowed to return any type of object, and the tests demonstrate this by returning strings. The type annotation requires it to return integ...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/10859' target='_blank' rel='noopener noreferrer'>Issue #10859: move lazy=&quot;select&quot; to lazy=&quot;mapper_default&quot;; add mapper &quot;default_lazy&quot;</a></td><td>stale/low urgency</td><td>2</td><td><span class='chip-row'><span class='muted'>none</span></span></td><td>feature, orm</td><td><div class='wide'>this can come in alongside #4641 this would make a change to `relationship` such that it does not set up `strategy_key` until mapper config stage, where it gets a look at its parent mapper. should be mentioned in docs particularly here: https://github.com/sqlalchemy/sqlalchemy/blob/d9ed5cb521d5e7a2b62646b43eaebc1ccf...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/10835' target='_blank' rel='noopener noreferrer'>Issue #10835: sqlalchemy.util.OrderedSet does not work with v2 in ORM mappings</a></td><td>stale/low urgency</td><td>2</td><td><span class='chip-row'><span class='muted'>none</span></span></td><td>bug, cextensions, orm - annotated declarative</td><td><div class='wide'>### Discussed in https://github.com/sqlalchemy/sqlalchemy/discussions/10833 This apparently was possible in 1.4 but not in 2.0 when cython extensions are built: ```py # sqlalchemy 2.0.25 from sqlalchemy import ForeignKey from sqlalchemy import inspect from sqlalchemy.orm import DeclarativeBase from sqlalchemy.orm im...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/10780' target='_blank' rel='noopener noreferrer'>Issue #10780: name with flat for aliased()</a></td><td>stale/low urgency</td><td>2</td><td><span class='chip-row'><span class='muted'>none</span></span></td><td>sql, use case</td><td><div class='wide'>### Describe the use case aliased() currently prohibits a name in conjunction with `flat=True`. Presumably this is because it would require some arbitrary naming convention. In reality, `flat=True` already has an arbitrary naming convention (suffix with numbers) which is useful for the query compiler, but not so muc...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/10748' target='_blank' rel='noopener noreferrer'>Issue #10748: schemes that attempt to reload modules are blocked by the inspection registry</a></td><td>has linked PR</td><td>62</td><td><span class='chip-row'><span class='chip'>PR #13402</span></span></td><td>bug, orm, PRs (with tests!) welcome, external library/application issues</td><td><div class='wide'>### Describe the bug There&#x27;s a nasty interaction between the following: * some import-time caching in SQLAlchemy (in [`sqlalchemy.inspection._registrars`](https://github.com/sqlalchemy/sqlalchemy/blob/66be1482db06adb908432b2e3b41d9393d1319f7/lib/sqlalchemy/inspection.py#L53)), * the way Coverage.py handles editable...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/10742' target='_blank' rel='noopener noreferrer'>Issue #10742: Bad PrimaryKeyConstraint metadata for MSSQL temporary table</a></td><td>stale/low urgency</td><td>2</td><td><span class='chip-row'><span class='muted'>none</span></span></td><td>bug, SQL Server, reflection</td><td><div class='wide'>### Describe the bug If I create a temporary table (name starting with a `#`) using MSSQL, then inspect the table metadata, it has a constraint `{PrimaryKeyConstraint()}`. However, none of the columns are detected as primary keys and the primary key constraint has no name. The names of the primary key constraints ar...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/10680' target='_blank' rel='noopener noreferrer'>Issue #10680: upgrade default driver for psycopg, oracledb</a></td><td>stale/low urgency</td><td>2</td><td><span class='chip-row'><span class='muted'>none</span></span></td><td>use case, dialects</td><td><div class='wide'>The current default drivers selection for some database is outdated or not really useful anymore. An idea for 2.1 is to start raising a deprecation warning when a default drivers is selected. Optionally the default behaviour is something that can be kept were it makes sense. In particular oracle and sqlite seem the...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/10676' target='_blank' rel='noopener noreferrer'>Issue #10676: Add reasonable min version for the internal dialects packages / databases</a></td><td>needs maintainer decision</td><td>28</td><td><span class='chip-row'><span class='muted'>none</span></span></td><td>setup</td><td><div class='wide'>Will compile a table with min version. Let&#x27;s target at least 2 years for dialect packages and something sensible for the databases Databases |db | best_effort | normal |full| notes | |---|-------------|--------|----|-------| |mssql|2005 -&gt; 2008| - | -|remove warning on _setup_version_attributes| |mysql|5.0.2-&gt;5.1|-|...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/10675' target='_blank' rel='noopener noreferrer'>Issue #10675: syntax error with mysql bulk update via INSERT ... SELECT ... ON DUPLICATE KEY UPDATE</a></td><td>good volunteer slice</td><td>38</td><td><span class='chip-row'><span class='muted'>none</span></span></td><td>bug, mysql, PRs (with tests!) welcome, dml</td><td><div class='wide'>### Discussed in https://github.com/sqlalchemy/sqlalchemy/discussions/10514 &lt;div type=&#x27;discussions-op-text&#x27;&gt; &lt;sup&gt;Originally posted by **anentropic** October 20, 2023&lt;/sup&gt; I am trying to bulk update via an insert on duplicate, but using `from_select` (instead of list of values as seen here https://github.com/sqlalc...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/10617' target='_blank' rel='noopener noreferrer'>Issue #10617: Improve how `Select.refresh` works with relationships</a></td><td>stale/low urgency</td><td>2</td><td><span class='chip-row'><span class='muted'>none</span></span></td><td>orm, use case</td><td><div class='wide'>Since version 1.4 that added support for relationship refresh, the implementation is sub-optimal, since it will always perform a query to the model table, followed by a query to the related table. ```py from __future__ import annotations from sqlalchemy import create_engine from sqlalchemy import ForeignKey from sql...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/10544' target='_blank' rel='noopener noreferrer'>Issue #10544: pysqlcipher open fail with err: TypeError: function takes at most 3 arguments (4 given) in dbapi_connection.create_function</a></td><td>stale/low urgency</td><td>2</td><td><span class='chip-row'><span class='muted'>none</span></span></td><td>bug, sqlite</td><td><div class='wide'>### Describe the bug using windows and pysqlcipher in python 3.11 get error to create engine with very basic usage ### Optional link from https://docs.sqlalchemy.org which documents the behavior that is expected _No response_ ### SQLAlchemy Version in Use 2.0.22 ### DBAPI (i.e. the database driver) pysqlcipher ### D...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/10541' target='_blank' rel='noopener noreferrer'>Issue #10541: Improve scalars performance by trying to avoid the creation of a Row</a></td><td>needs maintainer decision</td><td>28</td><td><span class='chip-row'><span class='muted'>none</span></span></td><td>performance, result fetching API improvements</td><td><div class='wide'>The current code when executing something like `conn.execute(...).scalars().all()` will create a Row object, at least in some cases, that is then discarded. The code should try to avoid doing the unnecessary row creation</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/10531' target='_blank' rel='noopener noreferrer'>Issue #10531: Issue with relationship typing when using Declarative-Imparative Mapping</a></td><td>waiting on contributor</td><td>0</td><td><span class='chip-row'><span class='muted'>none</span></span></td><td>bug, documentation, awaiting info, orm - annotated declarative</td><td><div class='wide'>### Describe the bug Hi :wave: First of all thank you for the huge amount of work done on SQLAlchemy, I really enjoy using this library :rocket: I&#x27;m trying to implement a many-to-many relationship (like explained [here](https://docs.sqlalchemy.org/en/20/orm/basic_relationships.html#setting-bi-directional-many-to-man...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/10527' target='_blank' rel='noopener noreferrer'>Issue #10527: Wrong typing for `with_for_update()`&#x27;s `of` argument.</a></td><td>good volunteer slice</td><td>38</td><td><span class='chip-row'><span class='muted'>none</span></span></td><td>bug, PRs (with tests!) welcome, typing</td><td><div class='wide'>### Ensure stubs packages are not installed - [X] No sqlalchemy stub packages is installed (both `sqlalchemy-stubs` and `sqlalchemy2-stubs` are not compatible with v2) ### Verify if the api is typed - [X] The api is not in a module listed in [#6810](https://github.com/sqlalchemy/sqlalchemy/issues/6810) so it should...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/10446' target='_blank' rel='noopener noreferrer'>Issue #10446: Support synonym with bulk_insert_mappings and insert</a></td><td>stale/low urgency</td><td>2</td><td><span class='chip-row'><span class='muted'>none</span></span></td><td>orm, use case, dml</td><td><div class='wide'>### Discussed in https://github.com/sqlalchemy/sqlalchemy/discussions/10439 &lt;div type=&#x27;discussions-op-text&#x27;&gt; &lt;sup&gt;Originally posted by **flyly0755** October 9, 2023&lt;/sup&gt; There is such a situation, data of different sources need to insert to one table, but the data column is a little different, for example: Data fro...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/10435' target='_blank' rel='noopener noreferrer'>Issue #10435: sql server metadata.reflect() fails if your SQL Server connection uses &quot;tempdb&quot; as the primary connection&#x27;s database</a></td><td>stale/low urgency</td><td>2</td><td><span class='chip-row'><span class='muted'>none</span></span></td><td>SQL Server, reflection</td><td><div class='wide'>### Describe the bug When trying to fetch all the tables from a MSSQL database (clean database via Docker https://hub.docker.com/_/microsoft-mssql-server) with the MetaData().reflect(bind=engine) it raises a NoSuchTableError on a temporary table (starting with a #) that indeed does not exist. This worked on SQLAlche...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/10417' target='_blank' rel='noopener noreferrer'>Issue #10417: mypy: coerced legacy syntax with subquery can not be typed</a></td><td>stale/low urgency</td><td>2</td><td><span class='chip-row'><span class='muted'>none</span></span></td><td>wontfix / out of scope, expected behavior, typing</td><td><div class='wide'>### Describe the bug I found a typing oddity with 2.0 that is not in the guide. Legacy code utilizing a `Session().query().subquery()` will run fine (and emit warnings that is it making a coercion) - but does not pass mypy becauce of the coercion. I&#x27;m not sure if this is a typing bug or not, as the legacy format is...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/10380' target='_blank' rel='noopener noreferrer'>Issue #10380: Declaring Composite Column Types as Optional leads to NULL data type for constituent columns in table definition</a></td><td>stale/low urgency</td><td>2</td><td><span class='chip-row'><span class='muted'>none</span></span></td><td>bug, orm, orm - annotated declarative</td><td><div class='wide'>### Describe the bug I was going through the tutorial for adding composite column types where sets of columns can be associated with a single user-defined datatype (FYR https://docs.sqlalchemy.org/en/20/orm/composites.html#composite-column-types). I tweaked the example a bit to make the composite column types option...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/10351' target='_blank' rel='noopener noreferrer'>Issue #10351: allow Nullable to be used with column_property()</a></td><td>stale/low urgency</td><td>2</td><td><span class='chip-row'><span class='muted'>none</span></span></td><td>orm, use case, typing</td><td><div class='wide'>### Ensure stubs packages are not installed - [X] No sqlalchemy stub packages is installed (both `sqlalchemy-stubs` and `sqlalchemy2-stubs` are not compatible with v2) ### Verify if the api is typed - [X] The api is not in a module listed in [#6810](https://github.com/sqlalchemy/sqlalchemy/issues/6810) so it should...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/10341' target='_blank' rel='noopener noreferrer'>Issue #10341: add official API to have naming conventions work for alternate constraint types</a></td><td>good volunteer slice</td><td>20</td><td><span class='chip-row'><span class='muted'>none</span></span></td><td>schema, naming conventions, PRs (with tests!) welcome</td><td><div class='wide'>Using them is poorly tested and the use case seems quite limited.</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/10335' target='_blank' rel='noopener noreferrer'>Issue #10335: Support `Final[Mapped[...]]` in the ORM</a></td><td>good volunteer slice</td><td>20</td><td><span class='chip-row'><span class='muted'>none</span></span></td><td>orm, PRs (with tests!) welcome, orm - annotated declarative</td><td><div class='wide'>In some cases generics are consired invariant since the mapped descriptors are not declared as final. While this use case for this is likely very small, it should not be too hard to support the following form: ```py from sqlalchemy import ForeignKey from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column,...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/10326' target='_blank' rel='noopener noreferrer'>Issue #10326: Allow InstrumentedAttribute in corresponding_column</a></td><td>stale/low urgency</td><td>2</td><td><span class='chip-row'><span class='muted'>none</span></span></td><td>sql, use case</td><td><div class='wide'>### Discussed in https://github.com/sqlalchemy/sqlalchemy/discussions/10325 &lt;div type=&#x27;discussions-op-text&#x27;&gt; &lt;sup&gt;Originally posted by **CaselIT** September 8, 2023&lt;/sup&gt; Currently InstrumentedAttribute is not a KeyedColumnElement so trying to use `corresponding_column` and similar raises a typing error This does no...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/10310' target='_blank' rel='noopener noreferrer'>Issue #10310: Select Values in Mysql</a></td><td>good volunteer slice</td><td>20</td><td><span class='chip-row'><span class='muted'>none</span></span></td><td>mysql, sql, PRs (with tests!) welcome, use case</td><td><div class='wide'>### Discussed in https://github.com/sqlalchemy/sqlalchemy/discussions/10309 &lt;div type=&#x27;discussions-op-text&#x27;&gt; &lt;sup&gt;Originally posted by **RasulGafarov** September 4, 2023&lt;/sup&gt; The following code: ``` my_select = select( Values( sqlalchemy.column(&quot;column_1&quot;, String), sqlalchemy.column(&quot;column_1&quot;, String), name=&quot;temp_...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/10116' target='_blank' rel='noopener noreferrer'>Issue #10116: re-entrant handle_error call if an exception is raised in result.all() within a DML process</a></td><td>stale/low urgency</td><td>2</td><td><span class='chip-row'><span class='muted'>none</span></span></td><td>bug, documentation, engine</td><td><div class='wide'>this is from https://review.opendev.org/c/openstack/oslo.db/+/888580 so far, the reproducer so far is this docker container: ``` FROM ubuntu:22.04 SHELL [&quot;/bin/bash&quot;, &quot;-c&quot;] RUN apt-get update &amp;&amp; apt-get install -y python3 tox git WORKDIR /root RUN git clone --depth 1 https://opendev.org/openstack/barbican WORKDIR /r...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/10094' target='_blank' rel='noopener noreferrer'>Issue #10094: document asyncio gotchas so far</a></td><td>stale/low urgency</td><td>2</td><td><span class='chip-row'><span class='muted'>none</span></span></td><td>documentation, asyncio</td><td><div class='wide'>- gether is messy to use with multiple sessions not created inside the task. Ref https://github.com/sqlalchemy/sqlalchemy/discussions/9312#discussioncomment-6419638</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/10064' target='_blank' rel='noopener noreferrer'>Issue #10064: MappedAsDataclass, prohibit constructor use and/or creation for non-mapped classes, abstract, mixins</a></td><td>stale/low urgency</td><td>2</td><td><span class='chip-row'><span class='muted'>none</span></span></td><td>bug, dataclasses, orm - annotated declarative</td><td><div class='wide'>see #10027. MappedAsDataclass basically cannot support the dataclass &quot;init&quot; feature on a class that isn&#x27;t mapped, and likely can&#x27;t support *any* dataclass features on such a class as instantiated. Propose instantiation of mixins / abstract emit a warning if they are also &quot;dataclass&quot; produced under 2.0, error in 2.1.</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/9944' target='_blank' rel='noopener noreferrer'>Issue #9944: Reflect don&#x27;t recognize foreign tables in postgresql</a></td><td>stale/low urgency</td><td>2</td><td><span class='chip-row'><span class='muted'>none</span></span></td><td>postgresql, schema, reflection, use case</td><td><div class='wide'>### Describe the use case Currently, when I call the MetaData().reflect() function, the foreign tables are not reflected. It would be interesting to have an argument in the function to be able to search for foreign tables as well. This way facilitates DML operations on foreign tables. ### Databases / Backends / Driv...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/9930' target='_blank' rel='noopener noreferrer'>Issue #9930: need docs /warnings that `__init__` is not called on load</a></td><td>high-priority/blocker</td><td>52</td><td><span class='chip-row'><span class='muted'>none</span></span></td><td>documentation, high priority, orm</td><td><div class='wide'>### Discussed in https://github.com/sqlalchemy/sqlalchemy/discussions/9928 since we retired https://docs.sqlalchemy.org/en/20/orm/constructors.html#mapping-constructors this information has been lost. also update links to that page such as https://docs.sqlalchemy.org/en/20/orm/events.html#sqlalchemy.orm.InstanceEven...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/9839' target='_blank' rel='noopener noreferrer'>Issue #9839: document network-related caveats for insertmanyvalues</a></td><td>stale/low urgency</td><td>2</td><td><span class='chip-row'><span class='muted'>none</span></span></td><td>documentation, SQL Server, performance, insertmanyvalues</td><td><div class='wide'>### Describe the bug We upgraded our sql alchemy version and observed a massive spike in execution time on the database. We are bulk uploading several 100k rows. We are using sql server on azure and pyodbc. We believe it relates to changes made in https://github.com/sqlalchemy/sqlalchemy/issues/9603 or https://githu...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/9833' target='_blank' rel='noopener noreferrer'>Issue #9833: Ignore classvar attributes defined in declarative classes</a></td><td>stale/low urgency</td><td>2</td><td><span class='chip-row'><span class='muted'>none</span></span></td><td>orm, use case, orm - annotated declarative</td><td><div class='wide'>Something that certainly **should** work, but does not, is to declare the type as a ``ClassVar[]``, since we scan these also in declarative: ```py class AlertItem2(Base): __tablename__ = &quot;alert_items2&quot; id = Column(BigInteger, primary_key=True, autoincrement=True) signature = Column(String) data_source_model_id = Col...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/9693' target='_blank' rel='noopener noreferrer'>Issue #9693: Text type columns using schema qualified collations compile a quoted DDL statement on Postgres</a></td><td>has linked PR</td><td>44</td><td><span class='chip-row'><span class='chip'>PR #12697</span><span class='chip'>PR #13418</span></span></td><td>postgresql, schema, datatypes, PRs (with tests!) welcome, use case</td><td><div class='wide'>### Describe the bug If you use a `Text` type that includes a fully schema qualified collation (ie. `Text(collation=&quot;my_schema.my_collation&quot;)`), the DDL statement created when running `metadata.create_all()` is incorrect for Postgres. The statement created presently is: `TEXT COLLATE &quot;my_schema.my_collation&quot;` Which...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/9690' target='_blank' rel='noopener noreferrer'>Issue #9690: reroute group_by coercion to expand fromclause using ORM-enabled plugin points</a></td><td>stale/low urgency</td><td>2</td><td><span class='chip-row'><span class='muted'>none</span></span></td><td>orm, sql, use case</td><td><div class='wide'>### Describe the bug What I want to do is to associate an ORM entity _USER_ with columns of FromClause produced by subquery() as described in tutorial. But when I use associated \&lt;AliasedClass\&gt; instance in group_by() of new _stmt_ it &#x27;unpacks&#x27; all columns that are selected in a subquery instead of unpacking just Us...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/9587' target='_blank' rel='noopener noreferrer'>Issue #9587: Use python type in Mapped to boolean expression catching thinks like `Mapped[int] == &#x27;a string&#x27;`</a></td><td>stale/low urgency</td><td>2</td><td><span class='chip-row'><span class='muted'>none</span></span></td><td>use case, typing</td><td><div class='wide'>### Ensure stubs packages are not installed - [X] No sqlalchemy stub packages is installed (both `sqlalchemy-stubs` and `sqlalchemy2-stubs` are not compatible with v2) ### Verify if the api is typed - [X] The api is not in a module listed in [#6810](https://github.com/sqlalchemy/sqlalchemy/issues/6810) so it should...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/9548' target='_blank' rel='noopener noreferrer'>Issue #9548: relationship loader options do a &quot;recursive&quot; thing inconsistently</a></td><td>high-priority/blocker</td><td>52</td><td><span class='chip-row'><span class='muted'>none</span></span></td><td>bug, high priority, orm, loader options</td><td><div class='wide'>### Discussed in https://github.com/sqlalchemy/sqlalchemy/discussions/9528 the wildcard option &#x27;*&#x27; acts recursively in some sitiuations (with no way to not be recursive) and non-recursively in others: ```py from sqlalchemy import Column from sqlalchemy import create_engine from sqlalchemy import ForeignKey from sqla...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/9493' target='_blank' rel='noopener noreferrer'>Issue #9493: MappedAsDataclass inherits dataclasses attributes, while the spec says they don&#x27;t</a></td><td>good volunteer slice</td><td>20</td><td><span class='chip-row'><span class='muted'>none</span></span></td><td>bug, orm, PRs (with tests!) welcome, dataclasses, orm - annotated declarative</td><td><div class='wide'>We also seem to make inherit dataclasses attributes, while we probably should not. Not sure if it&#x27;s connected to this other issue #9350 ```py from dataclasses import dataclass import sqlalchemy as sa import sqlalchemy.orm as sao import inspect class Base(sao.MappedAsDataclass, sao.DeclarativeBase, kw_only=True): pas...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/9468' target='_blank' rel='noopener noreferrer'>Issue #9468: Implementation for get_unique_constraints for MS SQL Server</a></td><td>needs maintainer decision</td><td>28</td><td><span class='chip-row'><span class='muted'>none</span></span></td><td>SQL Server, reflection, use case</td><td><div class='wide'>### Describe the use case It would be useful to have the method [Inspector.get_unique_constraints](https://github.com/sqlalchemy/sqlalchemy/blob/rel_2_0_5/lib/sqlalchemy/engine/interfaces.py#L1562) implemented for SQL Server. My immediate use case is that alembic [uses this method](https://github.com/sqlalchemy/alem...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/9425' target='_blank' rel='noopener noreferrer'>Issue #9425: tighten up compoundselect + textualselect use cases</a></td><td>stale/low urgency</td><td>2</td><td><span class='chip-row'><span class='muted'>none</span></span></td><td>bug, sql</td><td><div class='wide'>The following is not allowed ```py t = sa.Table( &quot;x&quot;, sa.MetaData(), sa.Column(&quot;a&quot;, sa.Integer), sa.Column(&quot;b&quot;, sa.Integer) ) sql = &quot;&quot;&quot; SELECT 1 as x, 2 as y UNION ALL SELECT 3, 4 &quot;&quot;&quot; q = sa.select(t).union_all(sa.text(sql)) ``` but it seems to render correctly if the coerce is removed for debug</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/9410' target='_blank' rel='noopener noreferrer'>Issue #9410: document dataclass gotchas so far</a></td><td>good volunteer slice</td><td>20</td><td><span class='chip-row'><span class='muted'>none</span></span></td><td>documentation, PRs (with tests!) welcome, dataclasses</td><td><div class='wide'>1. relationship = None issue : #9383 , #9856 - issue created: https://github.com/sqlalchemy/sqlalchemy/issues/12168 2. declared_attr on a mixin w/ dataclasses: #9408 3. order matters regarding the default value and init generated. this all comes from dataclasses, but it may be worth reiterate that 4. mention that al...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/9370' target='_blank' rel='noopener noreferrer'>Issue #9370: Create a way to run all the examples in the pipeline</a></td><td>stale/low urgency</td><td>2</td><td><span class='chip-row'><span class='muted'>none</span></span></td><td>bug, tests</td><td><div class='wide'>There are some examples that are not compatible with 2.0, like nested sets https://github.com/sqlalchemy/sqlalchemy/blob/8b108297d075ae68178cd18a9cb4d06feee7e075/examples/nested_sets/nested_sets.py#L56-L73 Creating a way of running the tests as part of the pipeline work help avoiding having old examples laying around</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/9369' target='_blank' rel='noopener noreferrer'>Issue #9369: allow_unmapped seems to not be honored in all cases</a></td><td>stale/low urgency</td><td>2</td><td><span class='chip-row'><span class='muted'>none</span></span></td><td>bug, orm, orm - annotated declarative</td><td><div class='wide'>### Discussed in https://github.com/sqlalchemy/sqlalchemy/discussions/9368 ```py from typing import List from sqlalchemy import Column, ForeignKey from sqlalchemy.orm import relationship from sqlalchemy.types import Integer from sqlalchemy.orm import declarative_base # qualify the base with __allow_unmapped__. Can a...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/9348' target='_blank' rel='noopener noreferrer'>Issue #9348: modify expunge() operation in uow to cascade along delete-orphan in addition to expunge</a></td><td>stale/low urgency</td><td>2</td><td><span class='chip-row'><span class='muted'>none</span></span></td><td>bug, orm, unit of work</td><td><div class='wide'>### Describe the bug In SQLAlchemy, when adding new objects to relationship with default cascades and then deleting them, they are kept inside session and then inserted on flush. But when having delete-orphan cascade, the desired behavior is to remove relative object from session as it is removed from relationship c...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/9301' target='_blank' rel='noopener noreferrer'>Issue #9301: Support mapped attributes that have deferred definitions</a></td><td>stale/low urgency</td><td>2</td><td><span class='chip-row'><span class='muted'>none</span></span></td><td>documentation, orm, use case, typing</td><td><div class='wide'>### Describe the use case In multiple cases it may be required to assign to a mapped class an attribute after the class definition, to for example break circular imports or similar, that is usually done by assigning the attribute to the class `ModelCls.attribute_lazy = ...` This is currently a bit awkward to impleme...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/9233' target='_blank' rel='noopener noreferrer'>Issue #9233: Expression index does not list all the columns</a></td><td>stale/low urgency</td><td>2</td><td><span class='chip-row'><span class='muted'>none</span></span></td><td>bug, schema</td><td><div class='wide'>### Describe the bug Only the first column in an expression is considered ### To Reproduce ```python import sqlalchemy as sa def go(idx): sa.Table( &quot;x&quot;, sa.MetaData(), sa.Column(&quot;x&quot;, sa.Integer), sa.Column(&quot;y&quot;, sa.Integer), idx, ) print([str(c) for c in idx.columns]) go(sa.Index(&quot;x&quot;, sa.func.div(sa.column(&quot;x&quot;), sa.c...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/9213' target='_blank' rel='noopener noreferrer'>Issue #9213: document `@classmethod` add for all `@declared_attr` to work w/ typing</a></td><td>stale/low urgency</td><td>2</td><td><span class='chip-row'><span class='muted'>none</span></span></td><td>documentation, typing</td><td><div class='wide'>### Describe the typing issue Next issue, it seems I get an error when using a `Mapped` class attribute in `Index`. ### To Reproduce Stripped down version of what I&#x27;m running: ```python @sa.orm.declarative_mixin class _Rhyme: __tablename__: str ph1: Mapped[int] ph2: Mapped[Optional[int]] @sa.orm.declared_attr def __...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/9212' target='_blank' rel='noopener noreferrer'>Issue #9212: add additional type migration section to whatsnew detailing declared_attr format changes, others</a></td><td>good volunteer slice</td><td>20</td><td><span class='chip-row'><span class='muted'>none</span></span></td><td>documentation, orm, PRs (with tests!) welcome, typing</td><td><div class='wide'>### Describe the typing issue I&#x27;m going through a small project with strict type checking, so will probably end up opening a few nitpick issues. It still seems difficult to me at the moment, to figure out what types should be used for certain annotations. Maybe a new page in the docs could be added to list these typ...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/9197' target='_blank' rel='noopener noreferrer'>Issue #9197: Support for mapping frozen dataclasses</a></td><td>stale/low urgency</td><td>2</td><td><span class='chip-row'><span class='muted'>none</span></span></td><td>orm, use case, dataclasses</td><td><div class='wide'>### Discussed in https://github.com/sqlalchemy/sqlalchemy/discussions/9192 Using frozen dataclasses may be useful in some cases, but implementing it will be non trivial. See mike [reply in the discussion](https://github.com/sqlalchemy/sqlalchemy/discussions/9192#discussioncomment-4820606)</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/9154' target='_blank' rel='noopener noreferrer'>Issue #9154: 11 test failures with PyPy3.9 7.3.11 in 2.0.0 (and git main)</a></td><td>needs maintainer decision</td><td>28</td><td><span class='chip-row'><span class='muted'>none</span></span></td><td>tests, pypy</td><td><div class='wide'>### Describe the bug When running the test suite (as of 6779fa861d11668f67d780d77e4ae76965cee6f7) under PyPy3.9 7.3.11, I get the following test failures: ``` FAILED test/ext/test_associationproxy.py::DictOfTupleUpdateTest::test_update_multi_elem_varg - AssertionError: &#x27;update expected at most 1 arguments?, got 2&#x27; !...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/9147' target='_blank' rel='noopener noreferrer'>Issue #9147: declarative builds permanent strong ref to classes that use declare_first or declare_last</a></td><td>stale/low urgency</td><td>2</td><td><span class='chip-row'><span class='muted'>none</span></span></td><td>bug, orm, declarative</td><td><div class='wide'>the event hook here: https://github.com/sqlalchemy/sqlalchemy/blob/689ebc30dcd6b9cedf01d729f748b31826720b5c/lib/sqlalchemy/orm/decl_base.py#L567-L582 that&#x27;s making a global event against Mapper. Declarative should make at most just *one* event hook against Mapper, then use its own collections to locate classes for w...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/9082' target='_blank' rel='noopener noreferrer'>Issue #9082: eager_defaults shouldn&#x27;t be needed for pk returning even if cols are not actual pks</a></td><td>stale/low urgency</td><td>2</td><td><span class='chip-row'><span class='muted'>none</span></span></td><td>bug, orm, eager_defaults</td><td><div class='wide'>### Discussed in https://github.com/sqlalchemy/sqlalchemy/discussions/9080 simple case can be reproduced on sqlite w/ new returning support ```py from sqlalchemy import Column from sqlalchemy import create_engine from sqlalchemy import DateTime from sqlalchemy import func from sqlalchemy import String from sqlalchem...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/9078' target='_blank' rel='noopener noreferrer'>Issue #9078: [2.0] Classes which are generics should document their type parameters</a></td><td>good volunteer slice</td><td>20</td><td><span class='chip-row'><span class='muted'>none</span></span></td><td>task, documentation, PRs (with tests!) welcome, typing</td><td><div class='wide'>### Describe the use case I&#x27;m working on a test branch for sqlalchemy 2.0 in a codebase which uses `mypy --strict`. This means that custom subclasses of generic types must provide type parameters (`--disallow-any-generics`). But it isn&#x27;t clear what the type parameters are or mean in the 2.0 documentation branch. ###...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/8992' target='_blank' rel='noopener noreferrer'>Issue #8992: tuple expanding params do not render bind_expression() for elements</a></td><td>has linked PR</td><td>94</td><td><span class='chip-row'><span class='chip'>PR #13323</span></span></td><td>bug, high priority, sql</td><td><div class='wide'>discovered during #8989, this is simply not implemented at all and the bind expression is ignored when it&#x27;s an element of a tuple. Also, the impl of a TupleType() is not getting the internal types propagated along, which is part of what would be needed for this to work ```py from sqlalchemy import Column from sqlalc...</div></td></tr><tr><td><a href='https://github.com/sqlalchemy/sqlalchemy/issues/8936' target='_blank' rel='noopener noreferrer'>Issue #8936: Make the new PG Range aware of the its bounds data type</a></td><td>stale/low urgency</td><td>2</td><td><span class='chip-row'><span class='muted'>none</span></span></td><td>postgresql, datatypes, use case</td><td><div class='wide'>### Describe the use case The SA Range does not have an exact notion of its &quot;type&quot;, i.e. there is no way to determine the data type of an empty or infinite range. ### Databases / Backends / Drivers targeted The `Range` class is specific to PostgreSQL, but is driver-agnostic. ### Example Use For example, my app shows...</div></td></tr></tbody></table></div></section></div>