Skip to content

Commit 4d3b536

Browse files
authored
REGR: rountripping datetime through sqlite doesn't work (#54985)
1 parent 4b456e2 commit 4d3b536

File tree

3 files changed

+8
-2
lines changed

3 files changed

+8
-2
lines changed

doc/source/whatsnew/v2.1.1.rst

+1
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ Fixed regressions
1818
- Fixed regression in :func:`read_csv` when ``delim_whitespace`` is True (:issue:`54918`, :issue:`54931`)
1919
- Fixed regression in :meth:`.GroupBy.get_group` raising for ``axis=1`` (:issue:`54858`)
2020
- Fixed regression in :meth:`DataFrame.__setitem__` raising ``AssertionError`` when setting a :class:`Series` with a partial :class:`MultiIndex` (:issue:`54875`)
21+
- Fixed regression in :meth:`DataFrame.to_sql` not roundtripping datetime columns correctly for sqlite (:issue:`54877`)
2122
- Fixed regression in :meth:`MultiIndex.append` raising when appending overlapping :class:`IntervalIndex` levels (:issue:`54934`)
2223
- Fixed regression in :meth:`Series.drop_duplicates` for PyArrow strings (:issue:`54904`)
2324
- Fixed regression in :meth:`Series.value_counts` raising for numeric data if ``bins`` was specified (:issue:`54857`)

pandas/io/sql.py

-2
Original file line numberDiff line numberDiff line change
@@ -2091,13 +2091,11 @@ def _adapt_time(t) -> str:
20912091

20922092
adapt_date_iso = lambda val: val.isoformat()
20932093
adapt_datetime_iso = lambda val: val.isoformat()
2094-
adapt_datetime_epoch = lambda val: int(val.timestamp())
20952094

20962095
sqlite3.register_adapter(time, _adapt_time)
20972096

20982097
sqlite3.register_adapter(date, adapt_date_iso)
20992098
sqlite3.register_adapter(datetime, adapt_datetime_iso)
2100-
sqlite3.register_adapter(datetime, adapt_datetime_epoch)
21012099

21022100
convert_date = lambda val: date.fromisoformat(val.decode())
21032101
convert_datetime = lambda val: datetime.fromisoformat(val.decode())

pandas/tests/io/test_sql.py

+7
Original file line numberDiff line numberDiff line change
@@ -2962,6 +2962,13 @@ def test_read_sql_string_inference(self):
29622962

29632963
tm.assert_frame_equal(result, expected)
29642964

2965+
def test_roundtripping_datetimes(self):
2966+
# GH#54877
2967+
df = DataFrame({"t": [datetime(2020, 12, 31, 12)]}, dtype="datetime64[ns]")
2968+
df.to_sql("test", self.conn, if_exists="replace", index=False)
2969+
result = pd.read_sql("select * from test", self.conn).iloc[0, 0]
2970+
assert result == "2020-12-31 12:00:00.000000"
2971+
29652972

29662973
@pytest.mark.db
29672974
class TestMySQLAlchemy(_TestSQLAlchemy):

0 commit comments

Comments
 (0)