如何在python中将dataframe(包含excel表)推送到mysql中?

w6lpcovy  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(307)

我正在用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)

k10s72fa

k10s72fa1#

看起来它实际上是获取了一些数据行并试图从中创建一个表。

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

相关问题