Как поместить dataframe (который содержит таблицу Excel) в MySQL в Python? - PullRequest
0 голосов
/ 18 октября 2018

Я читаю данные из S3 через python и пытаюсь записать их в базу данных mysql, но при этом я сталкиваюсь с ошибкой.

Любая помощь очень ценится!

from pandas.io import sql
import pymysql
from sqlalchemy import create_engine

engine = create_engine('mysql+pymysql://' + user + ':' + passw + '@' + host + ':' + str(port) + '/' + database , echo=False)

df.to_sql(con=engine, name='pna_data', if_exists='replace')

Ошибка:

InternalError: (pymysql.err.InternalError) (1059, "Identifier name 'Quantity at Regenersis India PVT LTD. Central warehouse - Bangalore' is too long") [SQL: '\nCREATE TABLE pna_data (\n\t<code>index BIGINT, \ n \ t Service Order Code TEXT, \ n \ t Vendor TEXT, \ n \ t TableauPSL TEXT, \ n \ t Service Station TEXT, \ n \t Customer Name TEXT, \ n \ t Customer Contact Number BIGINT, \ n \ t Customer Mobile Number FLOAT (53), \ n \ t Customer Email TEXT, \ n \ t Old IMEI 1 FLOAT (53), \ n\ t Old IMEI 2 FLOAT (53), \ n \ t IMEI 1 TEXT, \ n \ t IMEI 2 FLOAT (53), \ n \ t Product Model TEXT, \ n \ t Purchase Date DATETIME, \n \ t Service Type TEXT, \ n \ t IsWarrantyApplicable TEXT, \ n \ t Is CID TEXT, \ n \ t Create Time DATETIME, \ n \ t Apply for Parts Time DATETIME, \ n \ t DOA TEXT, \ n \ t Problem Category TEXT, \ n \ t Defective Part PN FLOAT (53), \ n \ t Defective Part Name TEXT, \ n \ t Replacement Part PN FLOAT (53), \ n \ t Replacement Part Name TEXT, \ n \ t Inventory Qty at Service center FLOAT (53), \ n \ t Quantity at B2X Mumbai Central warehouse FLOAT (53), \ n \ t Quantity at OnePlus - Bangalore Main Warehouse FLOAT (53), \ n \ t Quantity at Regenersis India PVT LTD. Central warehouse - Bangalore FLOAT (53)), \ n \ t Intransit Quantity FLOAT (53), \ n \ t Shipment Date DATETIME, \ n \ t Shipping Status TEXT, \ n \ t Logistic name TEXT, \ n \ t AWB No. TEXT,\ n \ t TAT FLOAT (53), \ n \ t Request Status TEXT, \ n \ t Part status TEXT, \ n \ t PNA TEXT, \ n \ t CreatedDate TEXT, \ n\ t UpdatedDate TEXT, \ n \ t PNA_Resolved_Date TEXT \ n) \ n \ n ']

(Справочная информация об этой ошибке: http://sqlalche.me/e/2j85)

1 Ответ

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

Похоже, что он буквально берет какую-то строку данных и пытается создать из нее таблицу.

CREATE TABLE pna_data ( ...
    Quantity at Regenersis India PVT LTD. Central warehouse - Bangalore FLOAT(53)
    ...
)

Таким образом, вы получаете ошибку

Имя идентификатора ... слишком длинное

Я предлагаю переименовать столбцы во входных данныхданные к чему-то менее подробному, а также денормализовать данные, например,

quantity   | location                                       | country
-----------|------------------------------------------------|---------
100        | "Regenersis India PVT LTD. Central warehouse"  | "Bangalore"

Если вы хотите, вы можете переименовать / изменить / разделить столбцы в Pandas, прежде чем вы даже попытаетесь сделать df.sql

...