2017-07-05 71 views
0

我想写一个数据框到MySQL表,但得到一个(111 Connection refused)错误。熊猫0.20.2 to_sql()使用MySQL

我跟着接受的答案在这里: Writing to MySQL database with pandas using SQLAlchemy, to_sql

答案代码:

import pandas as pd 
import mysql.connector 
from sqlalchemy import create_engine 

engine = create_engine('mysql+mysqlconnector://[user]:[pass]@[host]:[port]/[schema]', echo=False) 
data.to_sql(name='sample_table2', con=engine, if_exists = 'append', index=False) 

...和create_engine()线工作没有错误,但to_sql()符合这个错误失败:

(mysql.connector.errors.InterfaceError) 2003: Can't connect to MySQL server on 'localhost:3306' (111 Connection refused) 

我如何连接到我的MySQL数据库/表是不是真的有关,所以完成感谢不同的答案,但考虑到deprecation of the MySQL 'flavor' in pandas 0.20.2,将数据框写入MySQL的正确方法是什么?

+0

您是否了解有关连接被拒绝的其他具体信息?可能完全与Python,Pandas和SQLAlchemy无关 – openwonk

+0

没有其他的细节 - 但是我一直在使用MySQLdb作为连接到'read_sql()'而没有问题。这可能是读/写权限的区别吗? – pshep123

+0

权限可能是它(例如,如果你只有读权限)。你可以尝试使用其他接口创建一个简单的表(例如MySQL Workbench或Sequel Pro)吗? – openwonk

回答

2

感谢来自@AndyHayden的小贴士,this answer是个诀窍。基本上用mysqldb代替mysqlconnector是关键。

engine = create_engine('mysql+mysqldb://[user]:[pass]@[host]:[port]/[schema]', echo = False) 
df.to_sql(name = 'my_table', con = engine, if_exists = 'append', index = False) 

哪里[schema]是数据库名称,并在我的具体情况,:[port]省略与[host]localhost