Skip to content

Commit 246a9dd

Browse files
authored
BUG: to_sql raises when arrow dtype has missing values (#52180)
* BUG: to_sql raises when arrow dtype has missing values * Simplify
1 parent 7b8023f commit 246a9dd

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
@@ -2093,7 +2093,7 @@ def _dt_round(
20932093
def _dt_to_pydatetime(self):
20942094
data = self._pa_array.to_pylist()
20952095
if self._dtype.pyarrow_dtype.unit == "ns":
2096-
data = [ts.to_pydatetime(warn=False) for ts in data]
2096+
data = [None if ts is None else ts.to_pydatetime(warn=False) for ts in data]
20972097
return np.array(data, dtype=object)
20982098

20992099
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)