Skip to content

Commit 27a8380

Browse files
Backport PR #52180 on branch 2.0.x (BUG: to_sql raises when arrow dtype has missing values) (#52185)
Backport PR #52180: BUG: to_sql raises when arrow dtype has missing values Co-authored-by: Patrick Hoefler <[email protected]>
1 parent 19a5f38 commit 27a8380

File tree

2 files changed

+17
-1
lines changed

2 files changed

+17
-1
lines changed

pandas/core/arrays/arrow/array.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -2077,7 +2077,7 @@ def _dt_round(
20772077
def _dt_to_pydatetime(self):
20782078
data = self._data.to_pylist()
20792079
if self._dtype.pyarrow_dtype.unit == "ns":
2080-
data = [ts.to_pydatetime(warn=False) for ts in data]
2080+
data = [None if ts is None else ts.to_pydatetime(warn=False) for ts in data]
20812081
return np.array(data, dtype=object)
20822082

20832083
def _dt_tz_localize(

pandas/tests/io/test_sql.py

+16
Original file line numberDiff line numberDiff line change
@@ -570,6 +570,22 @@ def test_dataframe_to_sql_arrow_dtypes(conn, request):
570570
df.to_sql("test_arrow", conn, if_exists="replace", index=False)
571571

572572

573+
@pytest.mark.db
574+
@pytest.mark.parametrize("conn", all_connectable)
575+
def test_dataframe_to_sql_arrow_dtypes_missing(conn, request, nulls_fixture):
576+
# GH 52046
577+
pytest.importorskip("pyarrow")
578+
df = DataFrame(
579+
{
580+
"datetime": pd.array(
581+
[datetime(2023, 1, 1), nulls_fixture], dtype="timestamp[ns][pyarrow]"
582+
),
583+
}
584+
)
585+
conn = request.getfixturevalue(conn)
586+
df.to_sql("test_arrow", conn, if_exists="replace", index=False)
587+
588+
573589
@pytest.mark.db
574590
@pytest.mark.parametrize("conn", all_connectable)
575591
@pytest.mark.parametrize("method", [None, "multi"])

0 commit comments

Comments
 (0)