Description
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