我正在用python从s3读取数据,并试图写入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\tindex BIGINT, \n\tService Order Code TEXT, \n\tVendor TEXT, \n\tTableauPSL TEXT, \n\tService Station TEXT, \n\tCustomer Name TEXT, \n\tCustomer Contact Number BIGINT, \n\tCustomer Mobile Number FLOAT(53), \n\tCustomer Email TEXT, \n\tOld IMEI 1 FLOAT(53), \n\tOld IMEI 2 FLOAT(53), \n\tIMEI 1 TEXT, \n\tIMEI 2 FLOAT(53), \n\tProduct Model TEXT, \n\tPurchase Date DATETIME, \n\tService Type TEXT, \n\tIsWarrantyApplicable TEXT, \n\tIs CID TEXT, \n\tCreate Time DATETIME, \n\tApply for Parts Time DATETIME, \n\tDOA TEXT, \n\tProblem Category TEXT, \n\tDefective Part PN FLOAT(53), \n\tDefective Part Name TEXT, \n\tReplacement Part PN FLOAT(53), \n\tReplacement Part Name TEXT, \n\tInventory Qty at Service center FLOAT(53), \n\tQuantity at B2X Mumbai Central warehouse FLOAT(53), \n\tQuantity at OnePlus - Bangalore Main Warehouse FLOAT(53), \n\tQuantity at Regenersis India PVT LTD. Central warehouse - Bangalore FLOAT(53), \n\tIntransit Quantity FLOAT(53), \n\tShipment Date DATETIME, \n\tShipping Status TEXT, \n\tLogistic name TEXT, \n\tAWB No. TEXT, \n\tTAT FLOAT(53), \n\tRequest Status TEXT, \n\tPart status TEXT, \n\tPNA TEXT, \n\tCreatedDate TEXT, \n\tUpdatedDate TEXT, \n\tPNA_Resolved_Date TEXT\n)\n\n']
(此错误的背景信息:http://sqlalche.me/e/2j85)
1条答案
按热度按时间k10s72fa1#
看起来它实际上是获取了一些数据行并试图从中创建一个表。
因此,你得到了错误
标识符名称。。。太长了
我建议您将输入数据中的列重命名为不太详细的列,并对数据进行反规范化,例如。
如果您想,您可以在尝试重命名/修改/分离pandas中的列之前
df.sql