【问题标题】:MySQL `Load Data Infile Local` fails for .csv unless I open and save the file first. How can I avoid this step?除非我先打开并保存文件,否则 .csv 的 MySQL `Load Data Infile Local` 会失败。我怎样才能避免这一步?
【发布时间】:2013-05-16 13:33:32
【问题描述】:

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

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

接下来,我通过Load Data Local InfileCharset 也设置为utf8 的表上传到Amazon RDS MySQL。

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 文件。我环顾四周,但在任何地方都没有遇到过这个特殊问题。谢谢!

【问题讨论】:

标签: python mysql file-upload csv pandas


【解决方案1】:

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

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 支持,但忽略了记录它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-24
    • 2013-09-24
    • 1970-01-01
    • 2022-12-08
    • 2012-10-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多