Decimal in money range still string-binds on the executemany path
I maintainer di solito rispondono entro 1 giorno
@bewithgaurav ci sta già lavorando.
Dal 21/9/2026.
Valutazione
- Difficoltà
- 4/5
- Tempo stimato
- 3-5 giorni
- Idoneità per principianti
- 48/100
Direzione di ricerca
Inizia tracciando il percorso di binding dei parametri di executemany e confrontalo con le correzioni di execute() di #740. Riproduci il batch di Decimal con numeric(5,2), quindi considera la precisione e la scala dell’intero batch preservando il comportamento di string-binding di GH-503 e il dimensionamento con segni misti di GH-557; il lavoro è completo quando il batch viene associato in modo sicuro come SQL_NUMERIC senza queste regressioni.
Scritto dal modello di indicizzazione a partire dal testo della issue.
Descrizione
Describe the bug
#740 fixed money-range Decimal binding on both execute() routes (the native C++ path and the Python legacy path used when setinputsizes() covers fewer positions than parameters). executemany() is the one remaining path that still carries the money-range VARCHAR shortcut, so a money-range Decimal compared through executemany can still overflow:
cur.executemany("UPDATE t SET x = 1 WHERE v = ?", [(Decimal("12345.6789"),)])
# against v numeric(5,2): Arithmetic overflow error converting varchar to data type numeric
This is a non-shape in practice (executemany runs the statement per row and discards results, so nobody runs a comparison-SELECT through it), and it is not reachable from Django, which is why it is lower priority than #740.
Why it was scoped out of #740
executemany declares one parameter type for the whole batch and lets the server coerce each row's formatted string (GH-503). Switching money-range Decimals to SQL_NUMERIC there needs a single NUMERIC(precision, scale) that fits every row in the batch, which the code does not compute today — it tracks max string length, not max precision and scale. A naive switch regresses a mixed-sign batch (the GH-557 shape) with a string-truncation error.
Suggested fix
Add batch-wide precision/scale derivation in executemany so it can bind money-range Decimals as SQL_NUMERIC (like both execute() paths) without breaking the GH-503 batch string binding or the GH-557 mixed-sign column sizing.
Further technical details
mssql-python version: reproduces on the main branch alongside #740.
SQL Server version: SQL Server 2022
Operating system: driver-side, OS-independent
- Lingua principale
- Python
- Stelle
- 478
- Fork
- 62
- Merge medio
- 3g 1h
- PR unite (30g)
- 27
Preparare l'ambiente
Avvia il container di sviluppo del progetto nel browser, con il tuo account GitHub.
- Nessun Dockerfile né file Docker Compose
- Ha un modello di pull request
- Leggi la guida per i contributori
Come iniziare
- Leggi tutta la issue e poi la guida ai contributi del progetto.
- Commenta sulla issue per dire che te ne occupi tu — evita che due persone facciano lo stesso lavoro.
- Fai un fork del repository e lavora su un branch.
- Apri una pull request che faccia riferimento al numero della issue.
Altre issue di microsoft/mssql-python
-
area: bulk-copy
Difficoltà 2/5 1-3 ore Idoneità per principianti 70/100
microsoft/mssql-python#843 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
macOS: encrypted connections fail after Homebrew moved the `openssl` alias to `openssl@4`Forse già presa @bewithgaurav l’ha presa 14 giorni fa. Apertaarea: packaging-platform bug triage needed
Difficoltà 4/5 3-5 giorni Idoneità per principianti 55/100
microsoft/mssql-python#826 · 2 commenti · 1 assegnatario ·
I maintainer di solito rispondono entro 1 giorno
-
bulkcopy PyCore login is closed by SQL Server 2019 while ODBC and Go clients succeed (1.14.0)Forse di nuovo libera @bewithgaurav l’ha presa 34 giorni fa e non c’è nessuna pull request aperta. Apertaarea: bulk-copy bug triage done
microsoft/mssql-python#750 · 4 commenti · 1 assegnatario ·
I maintainer di solito rispondono entro 1 giorno
-
Announcement: mssql-python is coming to Django through mssql-django 2.0Forse di nuovo libera @bewithgaurav l’ha presa 40 giorni fa e non c’è nessuna pull request aperta. Apertaannouncement
microsoft/mssql-python#748 · 1 assegnatario ·
I maintainer di solito rispondono entro 1 giorno
-
Connection pool can briefly exceed max_size when pooling is disabled under loadForse già presa @bewithgaurav l’ha presa 23 giorni fa. Apertaarea: connectivity-auth bug triage done under development
Difficoltà 4/5 3-5 giorni Idoneità per principianti 62/100
microsoft/mssql-python#746 · 1 commento · 1 assegnatario ·
I maintainer di solito rispondono entro 1 giorno
Tutte le issue di microsoft/mssql-python
Issue simili
-
[Bug]: LangGraph Store sync put bypasses namespace validationForse già presa @ktz03 l’ha presa oggi. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 72/100
volcengine/OpenViking#6050 ·
I maintainer di solito rispondono entro 1 giorno
-
[Bug]: Streamed /v1/chat/completions sends unredacted agent error text (keys) in the final chunkForse già presa @rodricksz4h5 l’ha presa oggi. Apertaarea/streaming comp/gateway P2 type/security
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
NousResearch/hermes-agent#138245 ·
I maintainer di solito rispondono entro 1 giorno
-
[oblt-aw][autodoc] Update user onboarding guide for mandatory trigger CODEOWNERS stepForse già presa @github-actions l’ha presa oggi. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 66/100
I maintainer di solito rispondono entro 1 giorno
-
correction metadata
Difficoltà 2/5 Meno di un'ora Idoneità per principianti 68/100
acl-org/acl-anthology#10378 · 1 commento ·
I maintainer di solito rispondono entro 1 giorno
-
cloudtrail_multi_region_enabled_logging_management_events fails when the advanced event selector has a custom nameForse già presa @12YYCCYY16 l’ha presa oggi. Aperta
Difficoltà 2/5 1-3 ore Idoneità per principianti 78/100
prowler-cloud/prowler#13033 ·
I maintainer di solito rispondono entro 1 giorno