0

to_csv我通过使用 utf8 编码编写 pandas DataFrame 使用 python 脚本生成 .csv 文件。

consEx.to_csv(os.path.join(base_dir, "Database/Tables/Consumption Expenditure/consumptionExpenditure.csv"), encoding = 'utf8', index = False)

接下来,我通过 , 将 Amazon RDS MySQL 上传Load Data Local Infile到一个Charset也设置为 utf8 的表中。

CREATE  TABLE IF NOT EXISTS Consumer.Expenditure (
  ceID INT NOT NULL AUTO_INCREMENT ,
  ceCategory INT NOT NULL,
  year INT NULL,
  countryID INT NOT NULL,
  ceYoY DEC(15,2) NULL,
  dateCreated DATE NOT NULL ,
  lastModified DATETIME NULL DEFAULT NULL ,
  dateDeleted DATETIME NULL DEFAULT NULL ,
  PRIMARY KEY (ceID) ,
  CONSTRAINT ce_fk_countries
    FOREIGN KEY (countryID)
    REFERENCES ConsumerAlpha.Countries (countryID)
    ON DELETE NO ACTION
    ON UPDATE NO ACTION)

CHARSET utf8 
ENGINE = InnoDB;
SHOW WARNINGS;

现在,只有当我第一次打开并手动保存 csv 文件时,上传才有效 - 相同的名称,相同的位置。否则,它会失败而不会出错 - 只是不导入任何东西。但是,如果我打开、保存和关闭,上传就完美了。

LOAD DATA LOCAL 
INFILE '/Users/xxx/Dropbox/Data/Database/Tables/Consumption Expenditure/consumptionExpenditure.csv'
INTO TABLE Consumer.Expenditure
fields terminated by ','
optionally enclosed by '"'
lines terminated by '\r'
IGNORE 1 LINES
(ceCategory, year, countryID, ceYoY, dateCreated)
SET dateCreated = NOW();

为了避免这一步,我有什么遗漏吗?对于大型表,可能有许多 .csv 文件。我环顾四周,但在任何地方都没有遇到过这个特殊问题。谢谢!

4

1 回答 1

2

考虑通过使用跳过 CSV 步骤pandas.io.sql.write_frame

import MySQLdb
conn = Mysqldb.conn(host='...', user='...', passwd='...',db='...')

import pandas.io.sql as psql
psql.write_frame(dataframe, 'TableName', conn, 'mysql')

如果要追加到现有表,请使用关键字参数if_exists='append'

编辑:我忘记了@Andy 不久前写了基本相同的答案:https ://stackoverflow.com/a/16477603/1221924 。正如他所指出的,我们添加了 MySQL 支持,但忽略了记录它。

于 2013-05-21T17:43:47.817 回答