The `Cursor.fetch_dataframe` method doesn't respect case-sensitivity
Dieses Issue hat noch niemand übernommen.
Bewertung
- Schwierigkeit
- 2/5
- Geschätzter Aufwand
- 1-3 Stunden
- Anfängerfreundlichkeit
- 50/100
Rechercherichtung
Beginnen Sie in redshift_connector/cursor.py bei der Implementierung von fetch_dataframe um Zeile 526, wo Spaltennamen in Kleinbuchstaben umgewandelt werden. Reproduzieren Sie das Problem mit enable_case_sensitive_identifier auf true gesetzt und einer Abfrage, die sowohl "C" als auch "c" zurückgibt. Erledigt bedeutet, dass der resultierende DataFrame die von Redshift zurückgegebenen Spaltennamen einschließlich ihrer unterschiedlichen Groß-/Kleinschreibung beibehält.
Vom Indexierungsmodell aus dem Issue-Text verfasst.
Beschreibung
Driver version
2.1.3
Redshift version
PostgreSQL 8.0.2 on i686-pc-linux-gnu, compiled by GCC gcc (GCC) 3.4.2 20041017 (Red Hat 3.4.2-6.fc3), Redshift 1.0.76169
Client Operating System
macos
Python version
3.12.6
Problem description
The Cursor.fetch_dataframe method always lowercases column names, irrespective of the case-sensitivity configuration value. This behavior is unexpected, because the resulting DataFrame's columns may be treated as case-insensitive, even when that flag is set to true.
One example where this can be problematic is demonstrated below:
from redshift_connector import connect
conn = connect(<connection options>)
cursor = conn.cursor()
cursor.execute('SET enable_case_sensitive_identifier TO true')
cursor.execute('WITH t AS (SELECT 1 AS "C", 2 AS "c") SELECT * FROM t')
# cursor.fetch_dataframe()
# c c
# 0 1 2
# cursor.fetch_dataframe().to_dict()
# <stdin>:1: UserWarning: DataFrame columns are not unique, some columns will be omitted.
# {'c': {0: 2}}
Possible solutions
I see that there is an open PR related to this issue, but I don't think it solves it. I believe that the correct way to solve this is to get rid of the lower() call in line 526 altogether. That would mean that the columns produced by the driver reflect those returned by Redshift, hence respecting the case-sensitivity configuration value (see image below). I plan to open a PR with this fix soon.
P.S.: I see that the line of interest was introduced in the first commit of this repo (!) and hasn't changed since. My hunch is that this was most likely an oversight, since Redshift's documentation at the date of that commit had no mention of the enable_case_sensitive_identifier flag, so the driver must've not been updated to take it into account after it was introduced.
- Vorherrschende Sprache
- Python
- Sterne
- 220
- Forks
- 86
- PR-Merge-Kennzahlen
- Keine gemergten PRs in 30 T.
Entwicklungsumgebung
Erste Schritte
- Lesen Sie das ganze Issue und danach den Beitragsleitfaden des Projekts.
- Schreiben Sie ins Issue, dass Sie es übernehmen — das erspart doppelte Arbeit.
- Forken Sie das Repository und arbeiten Sie in einem Branch.
- Öffnen Sie einen Pull Request, der die Issue-Nummer nennt.
Mehr aus aws/amazon-redshift-python-driver
-
Schwierigkeit 1/5 1-3 Stunden Anfängerfreundlichkeit 74/100
-
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 30/100
aws/amazon-redshift-python-driver#268 · 2 Reaktionen ·
-
Schwierigkeit 4/5 3-5 Tage Anfängerfreundlichkeit 35/100
-
Schwierigkeit 5/5 Über eine Woche Anfängerfreundlichkeit 35/100
aws/amazon-redshift-python-driver#265 · 1 Kommentar · 4 Reaktionen ·
-
Schwierigkeit 3/5 1-2 Tage Anfängerfreundlichkeit 45/100
Alle Issues in aws/amazon-redshift-python-driver
Ähnliche Issues
-
bug status/needs-triage
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 86/100
prowler-cloud/prowler#12887 · 1 Kommentar ·
Maintainer antworten meist innerhalb von 1 Tag
-
area: desktop platform: macos priority: p3 status: ready type: enhancement
Schwierigkeit 1/5 Unter einer Stunde Anfängerfreundlichkeit 92/100
use-agent-os/agent-os#3484 ·
Maintainer antworten meist innerhalb von 2 Tagen
-
bug
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 86/100
open-telemetry/opentelemetry-python-contrib#5113 · 2 Kommentare · 2 Reaktionen ·
Maintainer antworten meist innerhalb von 1 Tag
-
external
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 68/100
langchain-ai/docs#6255 ·
Maintainer antworten meist innerhalb von 1 Tag
-
Schwierigkeit 2/5 1-3 Stunden Anfängerfreundlichkeit 72/100
Maintainer antworten meist innerhalb von 1 Tag