前言:
機器學習平臺開發初期,需要進行基于python的算法組件的開發(編寫不同模型算法的python腳本,并以Azkaban調度的方式來運行模型)。
由于以前沒有學過python,所以在最初的python環境搭建與數據庫連接這一塊,踩了不少的坑,在這里簡單記錄一下。(這是第一篇分享的公號,忘加原創,刪了重新發的一版)
問題與方案:
如果你也是一個像我這樣的python小白,那么你首先需要的是安裝Anaconda與Pycharm,具體的安裝配置,你可以參考:https://www.cnblogs.com/yuxuefeng/articles/9235431.html
由于我的Python版本是3.0的,所以需要安裝pymysql,如果你的Python版本是2.0的,那你可能需要安裝mysqldb。
?安裝指令?pip?install?pymysql
毫無難度,demo會在文后給出。
python連接impala就要相對復雜很多了,翻遍了網上的參考,下面這篇文章最有價值:https://ask.hellobi.com/blog/ysfyb/18251
安裝指令pip?install?sixpip?install?thrift_sasl==0.2.1?--no-deps(安裝的時候必須完整的加上這條指令)pip?install?pure-saslpip?install?impala
在這個過程中,如果一切安裝順利,那么在運行代碼的過程中,可能還會出現報錯,如果是下面這個方法的地方報錯,那你需要在對應的位置加上如下一行代碼。
def _send_message():??header=struct.pack(">BI",status,len(body))....if(type(body)?is?str):????????body?=?body.encode()
干貨分享:
import pymysql??#?建立數據庫連接?mysql_client?=?pymysql.Connect(?????host='主機',?????port=3306,?????user='用戶',?????passwd='密碼',?????db='數據庫',????charset='utf8')def?gettabledata(table_name):????sscur?=?mysql_client.cursor(pymysql.cursors.SSCursor)????sscur.execute('select?*?from?{}'.format(table_name))????res?=?sscur.fetchall()??#?獲取結果????print(table_name)????print(res)????mysql_client.close()#?數據庫連接和游標的關閉????sscur.close()????return?restable_name='表名'gettabledata(table_name)
import geventimport?timefrom impala.dbapi import connectfrom?impala.util?import?as_pandas?class?MyImpala:????def?__init__(self,?host,?port,?user,?password,auth_mechanism):????????self.host?=?host?????????#?impala主機地址????????self.port?=?port??????????#?impala端口 self.user = user # impala遠程連接用戶名????????self.password?=?password??#?impala遠程連接密碼????????self.auth_mechanism?=?auth_mechanism?#?impala遠程連接密碼????????self.impala_connect()????#?__init__初始化之后,執行的函數????def?impala_connect(self):????????self.conn?=?connect(host=self.host,????????????????????????????port=self.port,????????????????????????????user=self.user,????????????????????????????password=self.password,????????????????????????????auth_mechanism=self.auth_mechanism,???????????????????????????????)????????#?連接impala后執行的函數????????self.asynchronous()????def?run(self,?nmin,?nmax):????????#?創建游標????????self.cur?=?self.conn.cursor()????????#?定義sql語句,插入數據name,age,contace????????sql?=?"insert?into?jy_tb.student(name,age,contace)?values?(%s,%s,%s)"????????#?定義總插入行數為一個空列表????????data_list?=?[]????????for?i?in?range(nmin,?nmax):????????#?添加所有任務到總的任務列表????????????result?=?('zhangsan'?+?str(i),?12,?i)????????????data_list.append(result)????????#?執行多行插入,executemany(sql語句,數據(需一個元組類型))????????content?=?self.cur.executemany(sql,?data_list)????????if?content:????????????print('成功插入第{}條數據'.format(nmax?-?1))????????#?提交數據,必須提交,不然數據不會保存????????self.conn.commit()????def?asynchronous(self):????????#?g_l?任務列表????????#?定義了異步的函數:?這里用到了一個gevent.spawn方法????????max_line?=?10??#?定義每次最大插入行數(max_line=10,即一次插入10行)????????g_l?=?[gevent.spawn(self.run,?i,?i+max_line)?for?i?in?range(1,?11,?max_line)]????????#?gevent.joinall?等待所以操作都執行完畢????????gevent.joinall(g_l)????????self.cur.close()??#?關閉游標????????self.conn.close()??#?關閉impala連接if?__name__?==?'__main__':????start_time?=?time.time()??#?計算程序開始時間????st?=?MyImpala('主機',?21050,?'yarn',?'密碼',?'PLAIN')??#?實例化類,傳入必要參數????print('程序耗時{:.2f}'.format(time.time()?-?start_time))??#?計算程序總耗時
總結:
瓶子注定是孤獨的,騷年好好擼代碼吧~??????
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎
總結
以上是生活随笔為你收集整理的python连接mysql_Python 连接mysql与impala的全部內容,希望文章能夠幫你解決所遇到的問題。
如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。