Здесь нет необходимости использовать функцию copy (), и вам также не нужно преобразовывать из 'object' в 'str'.
Вы пишете в базу данных Oracle? Тип вывода по умолчанию для текстовых данных (включая «объект») - CLOB. Вы можете обойти это, указав тип dtype для использования. Например:
import pandas as pd
from sqlalchemy import types, create_engine
from sqlalchemy.exc import InvalidRequestError
conn = create_engine(...)
testdf = pd.DataFrame({'pet': ['dog','cat','mouse','dog','fish','pony','cat']
, 'count': [2,6,12,1,45,1,3]
, 'x': [105.3, 98.7, 112.4, 3.6, 48.9, 208.9, -1.7]})
test_types = dict(zip(
testdf.columns.tolist(),
(types.VARCHAR(length=20), types.Integer(), types.Float()) ))
try:
testdf.to_sql( name="test", schema="myschema"
, con=conn
, if_exists='replace' #'append'
, index=False
, dtype = test_types)
print (f"Wrote final input dataset to table {schema}.{table2}")
except (ValueError, InvalidRequestError):
print ("Could not write to table 'test'.")
Если вы не пишете в Oracle, укажите свою целевую базу данных - возможно, кто-то другой, имеющий опыт работы с этой СУБД, может посоветовать вам.