Python連接MySQL數據庫(pymysql),DataFrame寫入 MySQL(create_engine)- Python代碼

模塊安裝

使用以下命令安裝 PyMySQL:

$ pip install PyMySQL

若系統不支持 pip,還可以這樣安裝:

$ git clone https://github.com/PyMySQL/PyMySQL
$ cd PyMySQL/
$ python3 setup.py install

 

Python連接MySQL數據庫

# -*- coding:utf-8 -*-
import pymysql 
import pandas as pd
from pandas import DataFrame,Series

# 打開數據庫連接(host一般都是localhost,user填寫用戶名,password是密碼,port一般也是3306)
db = pymysql.connect(host='localhost', user='root', password='******', port=3306) 

cursor = db.cursor() #獲取遊標
data = cursor.execute("SELECT * FROM ajx.zhibiao")# 執行SQL查詢,獲取數據
data = list(cursor.fetchall())# 獲取單條數據
db.close()# 關閉數據庫連接

#獲取的數據存入本地(也可在下面的模型中直接使用 data )
re_outfile =  u'D:\\pythondata\\re_zhibiao.xlsx'
data_re.to_excel(re_outfile)
print(u'數據讀取結束,並保存至本地:', str(outputfile))

如果還需要獲取到列名,需要加一句了:

# -*- coding:utf-8 -*-
import pymysql 
import pandas as pd
from pandas import DataFrame,Series

# 打開數據庫連接(host一般都是localhost,user填寫用戶名,password是密碼,port一般也是3306)
db = pymysql.connect(host='localhost', user='root', password='******', port=3306) 

# 獲取數據
cursor = db.cursor() #獲取遊標
data = cursor.execute("SELECT * FROM ajx.zhibiao")# 執行SQL查詢,獲取數據
data = list(cursor.fetchall())# 獲取單條數據

# 獲取列名列表
# ################################################相對上一段代碼有改動的地方
fea = cursor.execute("SHOW FULL COLUMNS FROM ajx.zhibiao")#獲取列名
fea = list(cursor.fetchall())
lis=[]
for i in fea:
    lis.append(list(i)[0])
data = pd.DataFrame(data,columns=lis)#list轉化成dataframe格式
columns = data.columns.values.tolist() 
# #######################################################################

db.close()# 關閉數據庫連接

#獲取的數據存入本地(也可在下面的模型中直接使用 data )
re_outfile =  u'D:\\pythondata\\re_zhibiao.xlsx'
data_re.to_excel(re_outfile)
print(u'數據讀取結束,並保存至本地:', str(outputfile))

如果在所有的列中,你只需要獲取列名中含有特定字符的列,那麼就是這樣來實現:

# -*- coding:utf-8 -*-
import pymysql 
import pandas as pd
from pandas import DataFrame,Series

# 打開數據庫連接(host一般都是localhost,user填寫用戶名,password是密碼,port一般也是3306)
db = pymysql.connect(host='localhost', user='root', password='******', port=3306) 

# 獲取數據
cursor = db.cursor() #獲取遊標
data = cursor.execute("SELECT * FROM ajx.zhibiao")# 執行SQL查詢,獲取數據
data = list(cursor.fetchall())# 獲取單條數據

# 獲取列名列表
fea = cursor.execute("SHOW FULL COLUMNS FROM ajx.zhibiao")#獲取列名
fea = list(cursor.fetchall())
lis=[]
for i in fea:
    lis.append(list(i)[0])
data = pd.DataFrame(data,columns=lis)#list轉化成dataframe格式
columns = data.columns.values.tolist() 

db.close()# 關閉數據庫連接


#獲取列名中包含特定字符的列
# #################################相對上一段代碼有改動的地方
col_re = []  # 存儲包含‘re’字段的列名
for i in columns:
    if 're' in i:
        col_re.append(i)
data_re = data[col_re]  # 根據列名取列
data_re = DataFrame(data_re) # 轉化爲DataFrame格式
# ##################################################


#獲取的數據存入本地(也可在下面的模型中直接使用 data )
re_outfile =  u'D:\\pythondata\\re_zhibiao.xlsx'
data_re.to_excel(re_outfile)
print(u'數據讀取結束,並保存至本地:', str(outputfile))

 

Python  DataFrame寫入 MySQL

import pandas as pd
from sqlalchemy import create_engine

#獲取到dataframe格式的數據
datafile = u'D:\\pythondata\\learn\\split.xlsx'
data = pd.read_excel(datafile)

#填寫鏈接信息
engine = create_engine("mysql+pymysql://【此處填用戶名】:【此處填密碼】@【此處填host】:【此處填port】/【此處填數據庫的名稱】?charset=utf8") 
# 例如:engine = create_engine("mysql+pymysql://root:666666@localhost:3306/ajx?charset=utf8")

#開始寫入
data.to_sql(name = 'split',con = engine,if_exists = 'append',index = False,index_label = False)

DataFrame.to_sqlnameconschema = Noneif_exists ='fail'index = Trueindex_label = Nonechunksize = Nonedtype = Nonemethod = None 

name:表名;

if_exists : {'fail','replace','append'},默認'fail'。代表如果name表已存在,則如何操作。

  • if_exists ='fail':若表存在,則報錯;
  • if_exists ='replace':若表存在,則刪除表中數據重新導入;
  • if_exists ='append':若表存在,則保留表中數據,並將新數據插入;

這兩個是關鍵參數,其他參數的解釋可以參考文檔:

http://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.to_sql.html

 

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章