Skip to content

Commit 91a96c5

Browse files
committed
Force index=False for wr.db.to_sql() with redshift.
1 parent c474900 commit 91a96c5

File tree

2 files changed

+8
-1
lines changed

2 files changed

+8
-1
lines changed

awswrangler/db.py

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,10 @@ def to_sql(df: pd.DataFrame, con: sqlalchemy.engine.Engine, **pandas_kwargs) ->
3434
----
3535
Redshift: For large DataFrames (1MM+ rows) consider the function **wr.db.copy_to_redshift()**.
3636
37+
Note
38+
----
39+
Redshift: `index=False` will be forced.
40+
3741
Parameters
3842
----------
3943
df : pandas.DataFrame
@@ -92,6 +96,8 @@ def to_sql(df: pd.DataFrame, con: sqlalchemy.engine.Engine, **pandas_kwargs) ->
9296
)
9397
pandas_kwargs["dtype"] = dtypes
9498
pandas_kwargs["con"] = con
99+
if pandas_kwargs["con"].name.lower() == "redshift": # Redshift does not accept index
100+
pandas_kwargs["index"] = False
95101
max_attempts: int = 3
96102
for attempt in range(max_attempts):
97103
try:

testing/test_awswrangler/test_db.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,13 +89,14 @@ def test_sql(parameters, db_type):
8989
if db_type == "redshift":
9090
df.drop(["binary"], axis=1, inplace=True)
9191
engine = wr.catalog.get_engine(connection=f"aws-data-wrangler-{db_type}")
92+
index = True if engine.name == "redshift" else False
9293
wr.db.to_sql(
9394
df=df,
9495
con=engine,
9596
name="test_sql",
9697
schema=parameters[db_type]["schema"],
9798
if_exists="replace",
98-
index=False,
99+
index=index,
99100
index_label=None,
100101
chunksize=None,
101102
method=None,

0 commit comments

Comments
 (0)