Есть ли какой-либо способ динамически изменять тип данных по умолчанию (CSV) на типы данных MySQL

#python #mysql #pandas

#python #mysql #pandas

Вопрос:

Я хочу перенести данные CSV в таблицу MySQL.

Я прочитал CSV, который содержит все типы данных с помощью приведенной ниже команды: file = pd.read_csv(‘abc.csv’)

Для переноса в MySQL используется следующая команда: file.to_sql(con=engine, name=’abc’, if_exists=’replace’, index=True, dtype=None, method=None)

Это отправляет данные в таблицу MySQL, но принимает тип данных как «text», «bigint», но я хочу, чтобы это было как «varchar» и «int»….

CSV содержит 50 столбцов, поэтому, чтобы преодолеть эту проблему, я попробовал только для 3 полей, с dtype={‘index’: sql_types.INT, ‘Идентификатор сотрудника’: sql_types.INT, ‘Имя сотрудника’: sql_types.VARCHAR(255)} и это сработало!

Теперь мне нужно добавить оставшиеся 47 полей в этот словарь dtype,

итак, я хочу знать, есть ли какой-либо способ автоматически преобразовать тип данных без указания имени его столбца, например .., когда поля числовые, преобразуйте его в INT, когда поля буквенно-цифровые, преобразуйте его в VARCHAR, когда поля имеют тип даты, преобразуйте его в datetime, и этих трех строк будет достаточно.

Ответ №1:

После чтения в CSV вы можете просмотреть столбцы и изменить их:

 for col in list(df):
    if df[col].dtype == 'O':
        df[col] == df[col].astype(sql_types.VARCHAR(255))
    elif df[col].dtype == 'int':
        df[col] == df[col].astype(sql_types.INT)
  

Предполагается, что вы импортировали их sql_types откуда-то, потому что они не являются встроенными в Pandas. Но вы сказали, что смогли их использовать.

Если у вас есть формат даты, вы можете выполнить попытку / except для преобразования в pd.datetime и, если это так, сохранить их как тип даты SQL.