Python下的MySQL:整数值错误

0 投票
1 回答
947 浏览
提问于 2025-04-17 13:33

我有一个和这里提到的问题一样的疑问:

在MySQL中导入CSV数据时,空整数字段的默认值

我在把一个csv文件导入MySQL时,总是收到“错误的整数值”的警告。我看了所有相关的问题和答案,上面的链接就是我直接的问题。但是我在尝试用Python 2.7实现那里的答案时,似乎总是无法成功。

下面的代码是我尝试实现上面帖子中答案的代码。我觉得问题出在我在Load DATA Local Infile语句中使用“Set”子句的语法上……我非常希望能得到帮助,因为MySQL会自动把空的整数转换成“0”,这会影响我的分析,因为我希望空值是null。我的代码是:

import MySQLdb
db = MySQLdb.connect(blah, blah, blah)
cursor = db.cursor()

sql = """CREATE TABLE PLAYER(
       PLAYER_ID INT,
       DATE DATETIME,
       BATTING_AVERAGE INT
       )"""

cursor.execute(sql)
statement = """LOAD DATA LOCAL INFILE 'path/file.csv'
INTO TABLE PLAYER
COLUMNS TERMINATED BY ','
SET BATTING_AVERAGE = IF(@BATTING_AVERAGE='',NULL,@BATTING_AVERAGE)
IGNORE 1 LINES;"""

这段代码给出的错误是:

ProgramingError: (1064, "你的SQL语法有错误;请检查与你的MySQL服务器版本相对应的手册,以获取正确的语法,错误发生在'IGNORE 1 Lines'附近,第5行")

1 个回答

1

这里提到的 SETIGNORE 这两个部分顺序搞反了。试着把它们的位置调换一下:

statement = """LOAD DATA LOCAL INFILE 'path/file.csv'
INTO TABLE PLAYER
COLUMNS TERMINATED BY ','
IGNORE 1 LINES
SET BATTING_AVERAGE = IF(@BATTING_AVERAGE='',NULL,@BATTING_AVERAGE);"""

撰写回答