Pandas to_sql изменяет тип данных в таблице базы данных - PullRequest
0 голосов
/ 14 ноября 2018

Кто-нибудь испытывал это раньше?

У меня есть таблица со столбцами "int" и "varchar" - таблица расписания отчетов.

Я пытаюсь импортировать файл Excel с помощью ".xls "расширение этой таблицы с помощью программы на Python.Я использую pandas to_sql для чтения в 1 строке данных.

Импортированные данные - это 1 строка 11 столбцов.

Импорт работает успешно, но после импорта я заметил, что типы данных в исходной таблице имеюттеперь были изменены:

        int --> bigint
        char(1) --> varchar(max)
        varchar(30) --> varchar(max)

Есть идеи, как я могу предотвратить это?Переключатель в типах данных вызывает проблемы в процедурах downstrean.

   df = pd.read_excel(schedule_file,sheet_name='Schedule')
   params = urllib.parse.quote_plus(r'DRIVER={SQL Server};SERVER=<<IP>>;DATABASE=<<DB>>;UID=<<UDI>>;PWD=<<PWD>>')
   conn_str = 'mssql+pyodbc:///?odbc_connect={}'.format(params)
   engine = create_engine(conn_str)

   table_name='REPORT_SCHEDULE'
   df.to_sql(name=table_name,con=engine, if_exists='replace',index=False)

TIA

1 Ответ

0 голосов
/ 14 ноября 2018

Рассмотрите возможность использования аргумента dtype pandas.DataFrame.to_sql, где вы передаете словарь типов SQLAlchemy в именованные столбцы:

import sqlalchemy 
...
data.to_sql(name=table_name, con=engine, if_exists='replace', index=False,
            dtype={'name_of_datefld': sqlalchemy.DateTime(), 
                   'name_of_intfld': sqlalchemy.types.INTEGER(),
                   'name_of_strfld': sqlalchemy.types.VARCHAR(length=30),
                   'name_of_floatfld': sqlalchemy.types.Float(precision=3, asdecimal=True),
                   'name_of_booleanfld': sqlalchemy.types.Boolean}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...