2016-10-09 264 views
2

我想寫一個Python熊貓數據框到MySQL數據庫。我意識到可以使用sqlalchemy for this,但我想知道是否有另一種方式可能更容易,最好已經內置到Pandas中。我花了一段時間試圖用For循環來做,但它不可靠。寫一個熊貓數據框到MySQL

如果有人知道更好的方法,將不勝感激。

非常感謝!

+0

to_sql方法http://stackoverflow.com/a/16477603/2027457或http://pandas.pydata.org/pandas-docs/stable/generated/pandas。 DataFrame.to_sql.html – sb0709

+0

to_sql方法適用於我。 但是,請記住,它看起來像它將被棄用,以支持SQLAlchemy: FutureWarning:帶有DBAPI連接的'mysql'flavor已被棄用,並且將在未來的版本中被刪除。 MySQL將通過SQLAlchemy connectable進一步得到支持。 chunksize = chunksize,dtype = dtype) –

+0

到目前爲止仍然是活躍的,因此直到將被淘汰,比將需要一些時間,如果你不升級熊貓比應該工作。張貼答案比。 – sb0709

回答

1

其他選項以SQLAlchemy的可用於to_sql但將來發行將被棄用,但現在的版本大熊貓0.18.1文檔仍然有效。

根據大熊貓文檔pandas.DataFrame.to_sql你可以用下面的語法:

DataFrame.to_sql(name, con, flavor='sqlite', schema=None, if_exists='fail', index=True, index_label=None, chunksize=None, dtype=None) 

指定CON 類型/模式和風味'mysql的',這裏是一些說明:

con:SQLAlchemy引擎或DBAPI2連接(傳統模式) 使用SQLAlchemy可以使用該庫支持的任何數據庫。如果是DBAPI2對象,則只支持sqlite3。

風味:{'sqlite','mysql'},默認'sqlite'將SQL的味道改爲 的用法。使用SQLAlchemy引擎時被忽略。 'mysql'已被棄用, 將在未來的版本中被刪除,但它將通過SQLAlchemy引擎進一步得到支持 。

0

您可以通過使用pymysql做到這一點:

例如,假設你有下一個用戶名,密碼,主機和端口的MySQL數據庫,並要在數據庫「_2」來寫。

import pymysql 
user = 'root' 
passw = 'my-secret-pw-for-mysql-12ud' 
host = '172.17.0.2' 
port = 3306 
database = 'data_2' 

如果您已經在數據庫中創建

conn = pymysql.connect(host=host, 
         port=port, 
         user=user, 
         passwd=passw, 
         db=database, 
         charset='utf8') 

data.to_sql(name=database, con=conn, if_exists = 'replace', index=False, flavor = 'mysql') 

如果沒有數據庫中創建,也是有效的,當數據庫已經存在:

conn = pymysql.connect(host=host, port=port, user=user, passwd=passw) 

conn.cursor().execute("CREATE DATABASE IF NOT EXISTS {0} ".format(database)) 
conn = pymysql.connect(host=host, 
         port=port, 
         user=user, 
         passwd=passw, 
         db=database, 
         charset='utf8') 

data.to_sql(name=database, con=conn, if_exists = 'replace', index=False, flavor = 'mysql') 

類似的線程:

  1. Writing to MySQL database with pandas using SQLAlchemy, to_sql
  2. How to insert pandas dataframe via mysqldb into database?