MySQLdb:Pandas 数据框到 SQL 数据库错误:字符串格式化期间并非所有参数都转换
Posted
技术标签:
【中文标题】MySQLdb:Pandas 数据框到 SQL 数据库错误:字符串格式化期间并非所有参数都转换【英文标题】:MySQLdb: Pandas data-frame to SQL database error: not all arguments converted during string formatting 【发布时间】:2018-11-22 06:02:33 【问题描述】:所以,我想将数据框移动到数据库中,但我遇到了一些问题。我使用 pandas 库制作了数据框,并希望将数据上传到我的数据库中的表中。
我的代码的相关sn-ps和错误详情如下:
#CONNECTION TO SQL DATABASE
db=sql.connect(host="localhost",user="root",passwd="password",db="database_name")
cur=db.cursor()
#CONVERTING DATAFRAME(df_final) INTO TABLE
df_final.to_sql(con=db, name='finaltable', if_exists='replace', chunksize=5000)
错误详情:
Traceback (most recent call last):
File "C:\Users\DELL\AppData\Local\Programs\Python\Python36\lib\site-packages\M
ySQLdb\cursors.py", line 238, in execute
query = query % args
TypeError: not all arguments converted during string formatting
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "C:\Users\DELL\AppData\Local\Programs\Python\Python36\lib\site-packages\p
andas\io\sql.py", line 1400, in execute
cur.execute(*args)
File "C:\Users\DELL\AppData\Local\Programs\Python\Python36\lib\site-packages\M
ySQLdb\cursors.py", line 240, in execute
self.errorhandler(self, ProgrammingError, str(m))
File "C:\Users\DELL\AppData\Local\Programs\Python\Python36\lib\site-packages\M
ySQLdb\connections.py", line 52, in defaulterrorhandler
raise errorclass(errorvalue)
_mysql_exceptions.ProgrammingError: not all arguments converted during string fo
rmatting
During handling of the above exception, another exception occurred:
Traceback (most recent call last):
File "pt.py", line 77, in <module>
df_final.to_sql(con=db, name='finaltable', if_exists='replace', chunksize=50
00)
File "C:\Users\DELL\AppData\Local\Programs\Python\Python36\lib\site-packages\p
andas\core\generic.py", line 2127, in to_sql
dtype=dtype)
File "C:\Users\DELL\AppData\Local\Programs\Python\Python36\lib\site-packages\p
andas\io\sql.py", line 450, in to_sql
chunksize=chunksize, dtype=dtype)
File "C:\Users\DELL\AppData\Local\Programs\Python\Python36\lib\site-packages\p
andas\io\sql.py", line 1502, in to_sql
table.create()
File "C:\Users\DELL\AppData\Local\Programs\Python\Python36\lib\site-packages\p
andas\io\sql.py", line 561, in create
if self.exists():
File "C:\Users\DELL\AppData\Local\Programs\Python\Python36\lib\site-packages\p
andas\io\sql.py", line 549, in exists
return self.pd_sql.has_table(self.name, self.schema)
File "C:\Users\DELL\AppData\Local\Programs\Python\Python36\lib\site-packages\p
andas\io\sql.py", line 1514, in has_table
return len(self.execute(query, [name, ]).fetchall()) > 0
File "C:\Users\DELL\AppData\Local\Programs\Python\Python36\lib\site-packages\p
andas\io\sql.py", line 1412, in execute
raise_with_traceback(ex)
File "C:\Users\DELL\AppData\Local\Programs\Python\Python36\lib\site-packages\p
andas\compat\__init__.py", line 403, in raise_with_traceback
raise exc.with_traceback(traceback)
File "C:\Users\DELL\AppData\Local\Programs\Python\Python36\lib\site-packages\p
andas\io\sql.py", line 1400, in execute
cur.execute(*args)
File "C:\Users\DELL\AppData\Local\Programs\Python\Python36\lib\site-packages\M
ySQLdb\cursors.py", line 240, in execute
self.errorhandler(self, ProgrammingError, str(m))
File "C:\Users\DELL\AppData\Local\Programs\Python\Python36\lib\site-packages\M
ySQLdb\connections.py", line 52, in defaulterrorhandler
raise errorclass(errorvalue)
pandas.io.sql.DatabaseError: Execution failed on sql 'SELECT name FROM
sqlite_ma
ster WHERE type='table' AND name=?;': not all arguments converted during string
formatting
【问题讨论】:
【参考方案1】:显然,由于更新,我的方法已经过时,因此对于连接位,我使用“sqlalchemy”库中的“create_engine”而不是“mysqldb.connect()”来访问数据库:
#relevant import:
from sqlalchemy import create_engine
#accessing database:
engine = create_engine("mysql://root:PASSWORD@host/database_name")
con = engine.connect()
#uploading dataframe to database:
df.to_sql(con=con, name='final_table', if_exists='replace', chunksize=10000)
【讨论】:
【参考方案2】:对我来说,您的数据中似乎有空值。在调用 .to_sql() 之前尝试填充数据框中的空值
df_final.fillna('default string')
或者删除空行
df_final.dropna(inplace=True)
【讨论】:
以上是关于MySQLdb:Pandas 数据框到 SQL 数据库错误:字符串格式化期间并非所有参数都转换的主要内容,如果未能解决你的问题,请参考以下文章