Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

The Cursor.fetch_dataframe method doesn't respect case-sensitivity #238

Open
georgesittas opened this issue Oct 17, 2024 · 2 comments · May be fixed by #239
Open

The Cursor.fetch_dataframe method doesn't respect case-sensitivity #238

georgesittas opened this issue Oct 17, 2024 · 2 comments · May be fixed by #239

Comments

@georgesittas
Copy link

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.

Screenshot 2024-10-18 at 12 29 24 AM

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.

@Brooke-white
Copy link
Contributor

Hi @georgesittas , thank you for raising this issue and corresponding PR. The team is taking a look at the PR and will get back to you.

@georgesittas
Copy link
Author

Hey @Brooke-white, appreciate the response 👍

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
2 participants