我正在使用Python将一些pandas数据框中的列插入到MySQL中。我使用熊猫15.2。和mysql.connector。
import mysql.connector
cte = mysql.connector.connect(user=xxxxxxxxx, password=xxxxxxx, host=xxxxxx)
cursor = cte.cursor()
for index, row in pets.iterrows():
home_pets = (row['cats'], row['dogs'], row['goldfish'], row['rabbits'], row['mice'], row['parrots'])
add_pets = """
INSERT INTO pets
(cats, dogs, goldfish, rabbits, mice, parrots)
VALUES (%s, %s, %s, %s, %s, %s)
"""
cursor.execute(add_pets, home_pets)
cte.commit()
我的一个整数列中包含NaN'其中的价值观。我刚刚添加了这个,因为一切正常,我确定这是导致问题的列。这是一个varchar(5)(是int(5))列,未设置为" NOT NULL"。
编辑:此列(鹦鹉)包含数字0到5作为响应。它还有" NaN"被访者没有回答这个问题。
尝试在表格中插入数据时,我收到以下错误消息:
ProgrammingError Traceback (most recent call last)
<ipython-input-54-59a05bb50318> in <module>()
6 VALUES (%s, %s, %s, %s, %s, %s)
7 """
----> 8 cursor.execute(add_pets, home_pets)
9 cte.commit()
C:\Python27\lib\site-packages\mysql\connector\cursor.pyc in execute(self, operation, params, multi)
505 self._executed = stmt
506 try:
--> 507 self._handle_result(self._connection.cmd_query(stmt))
508 except errors.InterfaceError:
509 if self._connection._have_next_result: # pylint: disable=W0212
C:\Python27\lib\site-packages\mysql\connector\connection.pyc in cmd_query(self, query)
720 if not isinstance(query, bytes):
721 query = query.encode('utf-8')
--> 722 result = self._handle_result(self._send_cmd(ServerCmd.QUERY, query))
723
724 if self._have_next_result:
C:\Python27\lib\site-packages\mysql\connector\connection.pyc in _handle_result(self, packet)
638 return self._handle_eof(packet)
639 elif packet[4] == 255:
--> 640 raise errors.get_exception(packet)
641
642 # We have a text result set
ProgrammingError: 1054 (42S22): Unknown column 'nan' in 'field list'
我看到了这个问题,但他们没有使用mysql.connector。 Python Pandas write to sql with NaN values
我更喜欢将int列保留为int,如果可能的话不必将其更改为object(然后每次我从MySQL数据库中将数据读入Python时来回。这可能吗?感谢您的帮助
答案 0 :(得分:1)
您已将add_pets查询放入docstring中,以进行特殊注释,这可能是您遇到的问题。将其切换为普通引号可以解决此问题。
add_pets = "INSERT INTO pets (cats, dogs, goldfish, rabbits, mice, parrots) VALUES (%s, %s, %s, %s, %s, %s)"