From 1c853336ff648be0910b099b8f61f098c1388c16 Mon Sep 17 00:00:00 2001 From: Guilherme Martins Crocetti <24530683+gmcrocetti@users.noreply.github.com> Date: Tue, 25 Feb 2025 18:43:44 -0300 Subject: [PATCH] docs: include option 'delete_rows' in docstrings. fixed the doctest suite after adding a new example using 'delete_rows' to it. --- pandas/core/generic.py | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/pandas/core/generic.py b/pandas/core/generic.py index 81fefe8b8f999..80c43b76e53db 100644 --- a/pandas/core/generic.py +++ b/pandas/core/generic.py @@ -2788,7 +2788,7 @@ def to_sql( con, *, schema: str | None = None, - if_exists: Literal["fail", "replace", "append"] = "fail", + if_exists: Literal["fail", "replace", "append", "delete_rows"] = "fail", index: bool = True, index_label: IndexLabel | None = None, chunksize: int | None = None, @@ -2825,12 +2825,13 @@ def to_sql( schema : str, optional Specify the schema (if database flavor supports this). If None, use default schema. - if_exists : {'fail', 'replace', 'append'}, default 'fail' + if_exists : {'fail', 'replace', 'append', 'delete_rows'}, default 'fail' How to behave if the table already exists. * fail: Raise a ValueError. * replace: Drop the table before inserting new values. * append: Insert new values to the existing table. + * delete_rows: If a table exists, delete all records and insert data. index : bool, default True Write DataFrame index as a column. Uses `index_label` as the column @@ -2947,6 +2948,16 @@ def to_sql( ... conn.execute(text("SELECT * FROM users")).fetchall() [(0, 'User 6'), (1, 'User 7')] + Delete all rows before inserting new records with ``df3`` + + >>> df3 = pd.DataFrame({"name": ['User 8', 'User 9']}) + >>> df3.to_sql(name='users', con=engine, if_exists='delete_rows', + ... index_label='id') + 2 + >>> with engine.connect() as conn: + ... conn.execute(text("SELECT * FROM users")).fetchall() + [(0, 'User 8'), (1, 'User 9')] + Use ``method`` to define a callable insertion method to do nothing if there's a primary key conflict on a table in a PostgreSQL database.