Skip to content

Commit bcbe5ea

Browse files
ENH: Add dtype argument to read_sql_query
1 parent 2a115d5 commit bcbe5ea

File tree

2 files changed

+23
-2
lines changed

2 files changed

+23
-2
lines changed

doc/source/whatsnew/v1.2.0.rst

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -282,6 +282,7 @@ Other enhancements
282282
- Improve numerical stability for :meth:`.Rolling.skew`, :meth:`.Rolling.kurt`, :meth:`Expanding.skew` and :meth:`Expanding.kurt` through implementation of Kahan summation (:issue:`6929`)
283283
- Improved error reporting for subsetting columns of a :class:`.DataFrameGroupBy` with ``axis=1`` (:issue:`37725`)
284284
- Implement method ``cross`` for :meth:`DataFrame.merge` and :meth:`DataFrame.join` (:issue:`5401`)
285+
- :func:`pandas.read_sql_query` now accepts a ``dtype`` argument to cast the columnar data from the SQL database based on user input (:issue:`10285`)
285286

286287
.. ---------------------------------------------------------------------------
287288

pandas/io/sql.py

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import numpy as np
1414

1515
import pandas._libs.lib as lib
16+
from pandas._typing import Dtype
1617

1718
from pandas.core.dtypes.common import is_datetime64tz_dtype, is_dict_like, is_list_like
1819
from pandas.core.dtypes.dtypes import DatetimeTZDtype
@@ -119,10 +120,15 @@ def _parse_date_columns(data_frame, parse_dates):
119120
return data_frame
120121

121122

122-
def _wrap_result(data, columns, index_col=None, coerce_float=True, parse_dates=None):
123+
def _wrap_result(
124+
data, columns, index_col=None, coerce_float=True, parse_dates=None, dtype=None
125+
):
123126
"""Wrap result set of query in a DataFrame."""
124127
frame = DataFrame.from_records(data, columns=columns, coerce_float=coerce_float)
125128

129+
if dtype:
130+
frame = frame.astype(dtype)
131+
126132
frame = _parse_date_columns(frame, parse_dates)
127133

128134
if index_col is not None:
@@ -295,6 +301,7 @@ def read_sql_query(
295301
params=None,
296302
parse_dates=None,
297303
chunksize: None = None,
304+
dtype: Optional[Dtype] = None,
298305
) -> DataFrame:
299306
...
300307

@@ -308,6 +315,7 @@ def read_sql_query(
308315
params=None,
309316
parse_dates=None,
310317
chunksize: int = 1,
318+
dtype: Optional[Dtype] = None,
311319
) -> Iterator[DataFrame]:
312320
...
313321

@@ -320,6 +328,7 @@ def read_sql_query(
320328
params=None,
321329
parse_dates=None,
322330
chunksize: Optional[int] = None,
331+
dtype: Optional[Dtype] = None,
323332
) -> Union[DataFrame, Iterator[DataFrame]]:
324333
"""
325334
Read SQL query into a DataFrame.
@@ -381,6 +390,7 @@ def read_sql_query(
381390
coerce_float=coerce_float,
382391
parse_dates=parse_dates,
383392
chunksize=chunksize,
393+
dtype=dtype,
384394
)
385395

386396

@@ -1225,7 +1235,13 @@ def read_table(
12251235

12261236
@staticmethod
12271237
def _query_iterator(
1228-
result, chunksize, columns, index_col=None, coerce_float=True, parse_dates=None
1238+
result,
1239+
chunksize,
1240+
columns,
1241+
index_col=None,
1242+
coerce_float=True,
1243+
parse_dates=None,
1244+
dtype=None,
12291245
):
12301246
"""Return generator through chunked result set"""
12311247
while True:
@@ -1239,6 +1255,7 @@ def _query_iterator(
12391255
index_col=index_col,
12401256
coerce_float=coerce_float,
12411257
parse_dates=parse_dates,
1258+
dtype=dtype,
12421259
)
12431260

12441261
def read_query(
@@ -1249,6 +1266,7 @@ def read_query(
12491266
parse_dates=None,
12501267
params=None,
12511268
chunksize=None,
1269+
dtype=None,
12521270
):
12531271
"""
12541272
Read SQL query into a DataFrame.
@@ -1304,6 +1322,7 @@ def read_query(
13041322
index_col=index_col,
13051323
coerce_float=coerce_float,
13061324
parse_dates=parse_dates,
1325+
dtype=dtype,
13071326
)
13081327
else:
13091328
data = result.fetchall()
@@ -1313,6 +1332,7 @@ def read_query(
13131332
index_col=index_col,
13141333
coerce_float=coerce_float,
13151334
parse_dates=parse_dates,
1335+
dtype=dtype,
13161336
)
13171337
return frame
13181338

0 commit comments

Comments
 (0)