Decimal in money range still string-binds on the executemany path
Les mainteneurs répondent en général sous 1 jour
@bewithgaurav y travaille déjà.
Depuis le 21/9/2026.
Évaluation
- Difficulté
- 4/5
- Temps estimé
- 3-5 jours
- Accessibilité débutants
- 48/100
Piste de recherche
Commencez par suivre le chemin de liaison des paramètres de executemany et comparez-le aux correctifs de execute() de #740. Reproduisez le lot de Decimal avec numeric(5,2), puis prenez en compte la précision et l’échelle de l’ensemble du lot tout en préservant le comportement de liaison de chaînes de GH-503 et le dimensionnement des signes mixtes de GH-557 ; le travail est terminé lorsque le lot est lié correctement en tant que SQL_NUMERIC sans ces régressions.
Rédigé par le modèle d'indexation à partir du texte de l'issue.
Description
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
- Langage dominant
- Python
- Étoiles
- 478
- Forks
- 62
- Merge moyen
- 3 j 1 h
- PR mergées (30 j)
- 27
Préparer son environnement
Lance le conteneur de développement du projet dans votre navigateur, avec votre propre compte GitHub.
- Aucun Dockerfile ni fichier Docker Compose
- Propose un modèle de pull request
- Lire le guide de contribution
Par où commencer
- Lisez l'issue en entier, puis le guide de contribution du projet.
- Signalez en commentaire que vous la prenez — cela évite que deux personnes fassent le même travail.
- Forkez le dépôt et travaillez sur une branche.
- Ouvrez une pull request qui référence le numéro de l'issue.
Autres issues de microsoft/mssql-python
-
area: bulk-copy
Difficulté 2/5 1-3 heures Accessibilité débutants 70/100
microsoft/mssql-python#843 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
macOS: encrypted connections fail after Homebrew moved the `openssl` alias to `openssl@4`Peut-être pris @bewithgaurav l’a pris il y a 14 jours. Ouvertearea: packaging-platform bug triage needed
Difficulté 4/5 3-5 jours Accessibilité débutants 55/100
microsoft/mssql-python#826 · 2 commentaires · 1 personne assignée ·
Les mainteneurs répondent en général sous 1 jour
-
bulkcopy PyCore login is closed by SQL Server 2019 while ODBC and Go clients succeed (1.14.0)Peut-être à nouveau libre @bewithgaurav l’a pris il y a 34 jours, et aucune pull request n’est ouverte. Ouvertearea: bulk-copy bug triage done
microsoft/mssql-python#750 · 4 commentaires · 1 personne assignée ·
Les mainteneurs répondent en général sous 1 jour
-
Announcement: mssql-python is coming to Django through mssql-django 2.0Peut-être à nouveau libre @bewithgaurav l’a pris il y a 41 jours, et aucune pull request n’est ouverte. Ouverteannouncement
microsoft/mssql-python#748 · 1 personne assignée ·
Les mainteneurs répondent en général sous 1 jour
-
Connection pool can briefly exceed max_size when pooling is disabled under loadPeut-être pris @bewithgaurav l’a pris il y a 23 jours. Ouvertearea: connectivity-auth bug triage done under development
Difficulté 4/5 3-5 jours Accessibilité débutants 62/100
microsoft/mssql-python#746 · 1 commentaire · 1 personne assignée ·
Les mainteneurs répondent en général sous 1 jour
Toutes les issues de microsoft/mssql-python
Issues similaires
-
Agentic
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 82/100
Imbad0202/academic-research-skills#979 ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
reflex-dev/reflex#7561 · 1 commentaire ·
Les mainteneurs répondent en général sous 1 jour
-
Difficulté 2/5 1-3 heures Accessibilité débutants 72/100
-
Difficulté 2/5 1-3 heures Accessibilité débutants 62/100
prometheus-community/ansible#906 · 2 commentaires ·