当我尝试将 csv 导入 MYSQLdb 时,Python“命令不同步”错误消息

Posted

技术标签:

【中文标题】当我尝试将 csv 导入 MYSQLdb 时,Python“命令不同步”错误消息【英文标题】:Python "commands out of sync" error message when I am trying to import csv to MYSQLdb 【发布时间】:2018-01-02 20:52:10 【问题描述】:

当我想在 Python 2.7 中执行我的 sqldb 代码时收到此错误消息:

Traceback (most recent call last):
  File "C:/Python27/air18-mysql.py", line 52, in <module>
    cursor.execute(query)
  File "C:\Python27\lib\site-packages\MySQLdb\cursors.py", line 221, in execute
    if not self._defer_warnings: self._warning_check()
  File "C:\Python27\lib\site-packages\MySQLdb\cursors.py", line 107, in _warning_check
    warnings = self._get_db().show_warnings()
  File "C:\Python27\lib\site-packages\MySQLdb\connections.py", line 371, in show_warnings
    self.query("SHOW WARNINGS")
  File "C:\Python27\lib\site-packages\MySQLdb\connections.py", line 282, in query
    _mysql.connection.query(self, query)
ProgrammingError: (2014, "Commands out of sync; you can't run this command now")

我的相关代码如下:

connection = MySQLdb.connect(host='localhost',
    user='root',
    passwd='1234',
    db='database')
cursor = connection.cursor()
query = """ 
   CREATE TABLE `test` (
  `A` varchar(100) DEFAULT NULL,
  `B` varchar(100) DEFAULT NULL,
  `C` varchar(100) DEFAULT NULL,
  `D` varchar(100) DEFAULT NULL,
  `E` varchar(100) DEFAULT NULL,
  `F` varchar(100) DEFAULT NULL,
  `G` varchar(100) DEFAULT NULL,
  `ID` int(10) NOT NULL AUTO_INCREMENT,
  PRIMARY KEY (`ID`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8"""
cursor.execute(query)
connection.commit()
cursor.close()

connection = MySQLdb.connect(host='localhost',
    user='root',
    passwd='1234',
    db='database')
cursor = connection.cursor()
query = """ load data local infile 'C:/Python27/output.csv' 
into table test
character set latin1
fields terminated by ';'
enclosed by '"'
lines terminated by '\r\n';
ignore 1 lines;
"""
cursor.execute(query)
connection.commit()
cursor.close()

有人知道我做错了什么吗?

我也用另一个 csv 尝试过它,它工作正常。 也许我的 csv 文件有问题,或者我无法想象这是什么问题。

这是我的 csv 文件的一部分(在 NotePad++ 中):

"apple apricot";" avocado";"blackcurrant (fruit)-";"blackberry";"blueberry (fruit) ";"";"lemon lime"
"quince pear";" banana";"papaya (fruit)-";"orange";"passion fruit (fruit) ";"";"pineapple watermelon"

【问题讨论】:

不确认但是,您可以尝试在第二次创建连接时将连接更改为connection1并将光标更改为cursor1。同connection1 = MySQLdb.connect(host='localhost', user='root', passwd='1234', db='database') cursor1 = connection1.cursor() 我试过了,我也遇到了同样的问题 第 52 行是什么? cursor.execute(query) 您是否尝试过手动执行此操作?如果不尝试直接在mysql服务器中手动创建和插入相同的内容? 【参考方案1】:

在柠檬酸橙和菠萝西瓜之后,你少了一个半冒号。试试这个:

"apple apricot";" avocado";"blackcurrant (fruit)-";"blackberry";"blueberry (fruit) ";"";"lemon lime";"quince pear";" banana";"papaya (fruit)";"orange";"passion fruit (fruit) ";"";"pineapple watermelon";

【讨论】:

但是柠檬线和菠萝西瓜是我的线的末端(这是一个网络抓取数据),所以如果我想修改 csv 会更加自满。我认为有一种直接将其读入 mysqldb 的好方法,但我不知道为什么会收到此错误消息.. 如果您不能保证CSV的结构/格式,并且如果有轻微的CSV无效的可能性,则以编程方式读取CSV并格式化,然后将其导入数据库

以上是关于当我尝试将 csv 导入 MYSQLdb 时,Python“命令不同步”错误消息的主要内容,如果未能解决你的问题,请参考以下文章

Python 导入 MySQLdb 错误 - Mac 10.6

“将CSV导入Blender时无法将字符串转换为float”

与从 CSV 文件导出和导入相比,Python MySQLdb SScursor 速度较慢。可以加速吗?

Python MySQLdb 转义字符:查询在 MySQL 中有效,但在 python MySQLdb 中无效

当我通过 skip_footer arg 时,Pandas read_csv 忽略列 dtypes

使用 phpmyadmin 将单列 csv 文件导入 mysql