在使用Python的Pandas pd.to_sql()方法和pysql库将数据写入MySQL数据时,遇到了一个莫名其妙的问题,前几天还正常工作,今天想把程序整理长函数,重新上传数据到数据库,结果程序老是报错,错误信息如下:

写入数据库错误,错误信息: 
Execution failed on sql 'SELECT name FROM sqlite_master WHERE type='table' AND name=?;': not all arguments converted during string formatting

方法检查了还是找不到错误,百思不得其解,后来在百度里输入这个错误信息,查到有人也遇到过这个错误,原因是在使用Pandas写入SQL数据库时,不能使用pymysql.connections库,这个库只能用于查询数据,下面这样写就会报错:

conn = pymysql.connect(
        host='127.0.0.1',
        user='dbmanager',
        passwd='abc123456',
        db='test',
        port=3306,
        charset='utf8'
    )

如果是写入数据需要用到这样建立数据库连接:

conn='mysql+pymysql://dbmanager:abc123456@127.0.0.1:3306/test?charset=utf8'

然后再用这个conn作为pd.to_sql()的con参数,如下:

df.to_sql(name='table1', con=conn, if_exists='append',index=False)

再次执行,数据库就可以正常写入了。

Logo

DAMO开发者矩阵,由阿里巴巴达摩院和中国互联网协会联合发起,致力于探讨最前沿的技术趋势与应用成果,搭建高质量的交流与分享平台,推动技术创新与产业应用链接,围绕“人工智能与新型计算”构建开放共享的开发者生态。

更多推荐