Skip to content

BUG: ArrowExtensionArray' object has no attribute 'to_pydatetime when using to_sql command with a dataframe with date columns #52046

Closed
@FerriLuli

Description

@FerriLuli

Pandas version checks

  • I have checked that this issue has not already been reported.

  • I have confirmed this bug exists on the latest version of pandas.

  • I have confirmed this bug exists on the main branch of pandas.

Reproducible Example

import polars as pl

query = "SELECT getdate(), t.* FROM TABLE"
df_sql = pl.read_sql(query, connection_string_db1)
df_sql.schema
df2 = df_sql.to_pandas(use_pyarrow_extension_array=True)
df2.to_sql('table_name', connection_string_db2, if_exists='replace')

Issue Description

This issue persisted from the 2.0.0rc0 version, I made the tests using the same code i've used in the issue #51859 and made the confirmations about the code atualization looking at the file pandas-2.0.0rc1\pandas\core\arrays\arrow\array.py .
But even so the error ArrowExtensionArray' object has no attribute 'to_pydatetime continues to happen.

Full trace error

~\AppData\Local\Temp\ipykernel_14268\424779397.py in <module>
----> 1 df_sql.to_pandas(use_pyarrow_extension_array=True).to_sql('teste_2', con, if_exists='replace')

~\Anaconda3\lib\site-packages\pandas\core\generic.py in to_sql(self, name, con, schema, if_exists, index, index_label, chunksize, dtype, method)
   2868         from pandas.io import sql
   2869 
-> 2870         return sql.to_sql(
   2871             self,
   2872             name,

~\Anaconda3\lib\site-packages\pandas\io\sql.py in to_sql(frame, name, con, schema, if_exists, index, index_label, chunksize, dtype, method, engine, **engine_kwargs)
    765 
    766     with pandasSQL_builder(con, schema=schema, need_transaction=True) as pandas_sql:
--> 767         return pandas_sql.to_sql(
    768             frame,
    769             name,

~\Anaconda3\lib\site-packages\pandas\io\sql.py in to_sql(self, frame, name, if_exists, index, index_label, schema, chunksize, dtype, method, engine, **engine_kwargs)
   1914         )
   1915 
-> 1916         total_inserted = sql_engine.insert_records(
   1917             table=table,
   1918             con=self.con,

~\Anaconda3\lib\site-packages\pandas\io\sql.py in insert_records(self, table, con, frame, name, index, schema, chunksize, method, **engine_kwargs)
   1455 
   1456         try:
-> 1457             return table.insert(chunksize=chunksize, method=method)
   1458         except exc.StatementError as err:
   1459             # GH34431

~\Anaconda3\lib\site-packages\pandas\io\sql.py in insert(self, chunksize, method)
    995             raise ValueError(f"Invalid parameter `method`: {method}")
    996 
--> 997         keys, data_list = self.insert_data()
    998 
    999         nrows = len(self.frame)

~\Anaconda3\lib\site-packages\pandas\io\sql.py in insert_data(self)
    964             vals = ser._values
    965             if vals.dtype.kind == "M":
--> 966                 d = vals.to_pydatetime()
    967             elif vals.dtype.kind == "m":
    968                 # store as integers, see GH#6921, GH#7076

AttributeError: 'ArrowExtensionArray' object has no attribute 'to_pydatetime'

Expected Behavior

I expect to be able to take my data (with date types) from my first database process it using pandas and then write it in my second database.

Installed Versions

INSTALLED VERSIONS

python : 3.9.13.final.0
python-bits : 64
pandas : 2.0.0rc1
numpy : 1.21.5
pytz : 2022.1
dateutil : 2.8.2
setuptools : 63.4.1
pip : 22.2.2
Cython : 0.29.32
pytest : 7.1.2
hypothesis : None
sphinx : 5.0.2
blosc : None
feather : None
xlsxwriter : 3.0.3
lxml.etree : 4.9.1
html5lib : None
pymysql : None
psycopg2 : None
jinja2 : 2.11.3
IPython : 7.31.1
pandas_datareader: None
bs4 : 4.11.1
bottleneck : 1.3.5
brotli :
fastparquet : None
fsspec : 2022.11.0
gcsfs : None
matplotlib : 3.5.2
numba : 0.55.1
numexpr : 2.8.3
odfpy : None
openpyxl : 3.0.10
pandas_gbq : None
pyarrow : 11.0.0
pyreadstat : None
pyxlsb : None
s3fs : 2023.3.0
scipy : 1.9.1
snappy :
sqlalchemy : 1.4.39
tables : 3.6.1
tabulate : 0.8.10
xarray : 0.20.1
xlrd : 2.0.1
zstandard : None
tzdata : None
qtpy : 2.2.0
pyqt5 : None

Metadata

Metadata

Assignees

No one assigned

    Labels

    Arrowpyarrow functionalityBugIO SQLto_sql, read_sql, read_sql_query

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions