@@ -2788,7 +2788,7 @@ def to_sql(
27882788 con ,
27892789 * ,
27902790 schema : str | None = None ,
2791- if_exists : Literal ["fail" , "replace" , "append" ] = "fail" ,
2791+ if_exists : Literal ["fail" , "replace" , "append" , "delete_rows" ] = "fail" ,
27922792 index : bool = True ,
27932793 index_label : IndexLabel | None = None ,
27942794 chunksize : int | None = None ,
@@ -2825,12 +2825,13 @@ def to_sql(
28252825 schema : str, optional
28262826 Specify the schema (if database flavor supports this). If None, use
28272827 default schema.
2828- if_exists : {'fail', 'replace', 'append'}, default 'fail'
2828+ if_exists : {'fail', 'replace', 'append', 'delete_rows' }, default 'fail'
28292829 How to behave if the table already exists.
28302830
28312831 * fail: Raise a ValueError.
28322832 * replace: Drop the table before inserting new values.
28332833 * append: Insert new values to the existing table.
2834+ * delete_rows: If a table exists, delete all records and insert data.
28342835
28352836 index : bool, default True
28362837 Write DataFrame index as a column. Uses `index_label` as the column
@@ -2947,6 +2948,16 @@ def to_sql(
29472948 ... conn.execute(text("SELECT * FROM users")).fetchall()
29482949 [(0, 'User 6'), (1, 'User 7')]
29492950
2951+ Delete all rows before inserting new records with ``df3``
2952+
2953+ >>> df3 = pd.DataFrame({"name": ['User 8', 'User 9']})
2954+ >>> df3.to_sql(name='users', con=engine, if_exists='delete_rows',
2955+ ... index_label='id')
2956+ 2
2957+ >>> with engine.connect() as conn:
2958+ ... conn.execute(text("SELECT * FROM users")).fetchall()
2959+ [(0, 'User 8'), (1, 'User 9')]
2960+
29502961 Use ``method`` to define a callable insertion method to do nothing
29512962 if there's a primary key conflict on a table in a PostgreSQL database.
29522963
0 commit comments