Skip to content

Commit 249cbfd

Browse files
committed
wip - trying out new solution
1 parent bbd7a36 commit 249cbfd

File tree

2 files changed

+9
-20
lines changed

2 files changed

+9
-20
lines changed

pandas/io/sql.py

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1006,7 +1006,7 @@ def _execute_insert(self, conn, keys: list[str], data_iter) -> int:
10061006
Each item contains a list of values to be inserted
10071007
"""
10081008
data = [dict(zip(keys, row)) for row in data_iter]
1009-
result = conn.execute(self.table.insert(), data)
1009+
result = self.pd_sql.execute(self.table.insert(), data)
10101010
return result.rowcount
10111011

10121012
def _execute_insert_multi(self, conn, keys: list[str], data_iter) -> int:
@@ -1023,7 +1023,7 @@ def _execute_insert_multi(self, conn, keys: list[str], data_iter) -> int:
10231023

10241024
data = [dict(zip(keys, row)) for row in data_iter]
10251025
stmt = insert(self.table).values(data)
1026-
result = conn.execute(stmt)
1026+
result = self.pd_sql.execute(stmt)
10271027
return result.rowcount
10281028

10291029
def insert_data(self) -> tuple[list[str], list[np.ndarray]]:
@@ -1670,7 +1670,7 @@ def execute(self, sql: str | Select | TextClause, params=None):
16701670

16711671
try:
16721672
return execute_function(sql, *args)
1673-
except SQLAlchemyError as exc:
1673+
except Exception as exc:
16741674
raise DatabaseError(f"Execution failed on sql '{sql}': {exc}") from exc
16751675

16761676
def read_table(
@@ -2085,9 +2085,9 @@ def delete_rows(self, table_name: str, schema: str | None = None) -> None:
20852085
self.meta.reflect(
20862086
bind=self.con, only=[table_name], schema=schema, views=True
20872087
)
2088-
with self.run_transaction() as con:
2088+
with self.run_transaction():
20892089
table = self.get_table(table_name, schema)
2090-
con.execute(table.delete())
2090+
self.execute(table.delete())
20912091

20922092
self.meta.clear()
20932093

@@ -2442,8 +2442,7 @@ def has_table(self, name: str, schema: str | None = None) -> bool:
24422442
def delete_rows(self, name: str, schema: str | None = None) -> None:
24432443
table_name = f"{schema}.{name}" if schema else name
24442444
if self.has_table(name, schema):
2445-
with self.con.cursor() as cur:
2446-
cur.execute(f"DELETE FROM {table_name}")
2445+
self.execute(f"DELETE FROM {table_name}").close()
24472446

24482447
def _create_sql_schema(
24492448
self,

pandas/tests/io/test_sql.py

Lines changed: 3 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -2718,7 +2718,6 @@ def test_delete_rows_success(conn_name, test_frame1, request):
27182718

27192719
@pytest.mark.parametrize("conn_name", all_connectable)
27202720
def test_delete_rows_is_atomic(conn_name, request):
2721-
adbc_driver_manager = pytest.importorskip("adbc_driver_manager")
27222721
sqlalchemy = pytest.importorskip("sqlalchemy")
27232722

27242723
table_name = "temp_frame"
@@ -2737,20 +2736,11 @@ def test_delete_rows_is_atomic(conn_name, request):
27372736
with pandasSQL.run_transaction() as cur:
27382737
cur.execute(table_stmt)
27392738

2740-
if conn_name != "sqlite_buildin" and "adbc" not in conn_name:
2741-
expected_exception = sqlalchemy.exc.IntegrityError
2742-
elif "adbc" in conn_name and "sqlite" in conn_name:
2743-
expected_exception = adbc_driver_manager.InternalError
2744-
elif "adbc" in conn_name and "postgres" in conn_name:
2745-
expected_exception = adbc_driver_manager.ProgrammingError
2746-
elif conn_name == "sqlite_buildin":
2747-
expected_exception = sqlite3.IntegrityError
2748-
27492739
with pandasSQL.run_transaction():
27502740
pandasSQL.to_sql(original_df, table_name, if_exists="append", index=False)
27512741

27522742
# inserting duplicated values in a UNIQUE constraint column
2753-
with pytest.raises(expected_exception):
2743+
with pytest.raises(pd.errors.DatabaseError):
27542744
with pandasSQL.run_transaction():
27552745
pandasSQL.to_sql(
27562746
replacing_df, table_name, if_exists="delete_rows", index=False
@@ -3473,8 +3463,8 @@ def test_to_sql_with_negative_npinf(conn, request, input):
34733463
mark = pytest.mark.xfail(reason="GH 36465")
34743464
request.applymarker(mark)
34753465

3476-
msg = "inf cannot be used with MySQL"
3477-
with pytest.raises(ValueError, match=msg):
3466+
msg = "Execution failed on sql"
3467+
with pytest.raises(pd.errors.DatabaseError, match=msg):
34783468
df.to_sql(name="foobar", con=conn, index=False)
34793469
else:
34803470
assert df.to_sql(name="foobar", con=conn, index=False) == 1

0 commit comments

Comments
 (0)