From daacb143823774e14052b7c36b0fbf220be4879b Mon Sep 17 00:00:00 2001 From: root Date: Tue, 23 Nov 2021 12:26:29 +0000 Subject: [PATCH] export_mysql_data_to_csv --- .../README.md | 25 ++++++++ .../config.ini | 10 ++++ .../export_mysql_data_to_csv.py | 56 ++++++++++++++++++ .../export_mysql_to_csv_send_to_wocom/pic.png | Bin 0 -> 10218 bytes .../requirements.txt | 17 ++++++ 5 files changed, 108 insertions(+) create mode 100644 projects/export_mysql_to_csv_send_to_wocom/README.md create mode 100644 projects/export_mysql_to_csv_send_to_wocom/config.ini create mode 100644 projects/export_mysql_to_csv_send_to_wocom/export_mysql_data_to_csv.py create mode 100644 projects/export_mysql_to_csv_send_to_wocom/pic.png create mode 100644 projects/export_mysql_to_csv_send_to_wocom/requirements.txt diff --git a/projects/export_mysql_to_csv_send_to_wocom/README.md b/projects/export_mysql_to_csv_send_to_wocom/README.md new file mode 100644 index 000000000..2fe0bc4b0 --- /dev/null +++ b/projects/export_mysql_to_csv_send_to_wocom/README.md @@ -0,0 +1,25 @@ +# export_mysql_to_csv_send_to_wocom + +Export the data in mysql into CSV files and send them to enterprise wechat group chat. + +### Prerequisites + +- PyMySQL==1.0.2 +- requests==2.26.0 + +### How to run the script + +```shell +# 1. edit config.ini +$ vim config.ini +# 2. run script +$ python export_mysql_data_to_csv.py +``` + +### Screenshot/GIF showing the sample use of the script + +![pic](./pic.png) + +### Author Name + +[Yuan Lei(雷园)](https://github.com/LeiyuanBlog) diff --git a/projects/export_mysql_to_csv_send_to_wocom/config.ini b/projects/export_mysql_to_csv_send_to_wocom/config.ini new file mode 100644 index 000000000..a8ed91a7c --- /dev/null +++ b/projects/export_mysql_to_csv_send_to_wocom/config.ini @@ -0,0 +1,10 @@ +[db] +host = 127.0.0.1 +username = root +password = 123456 +database = user +[wecom] +key = * +[message] +sql = select * from user +title = 测试文件 diff --git a/projects/export_mysql_to_csv_send_to_wocom/export_mysql_data_to_csv.py b/projects/export_mysql_to_csv_send_to_wocom/export_mysql_data_to_csv.py new file mode 100644 index 000000000..ff7abafa8 --- /dev/null +++ b/projects/export_mysql_to_csv_send_to_wocom/export_mysql_data_to_csv.py @@ -0,0 +1,56 @@ +# -*- coding: utf-8 -*- +import codecs +import configparser +import csv +import time + +import pymysql +import requests as requests + +ini = configparser.ConfigParser() +ini.read('config.ini') +wecom_key = ini.get('wecom', 'key') + + +def sql(sqlstr): # 定义一个执行SQL的函数 + conn = pymysql.connect(host=ini.get('db', 'host'), user=ini.get('db', 'username'), + password=ini.get('db', 'password'), database=ini.get('db', 'database')) + cursor = conn.cursor() + cursor.execute(sqlstr) + results = cursor.fetchall() # 获取查询的所有记录 + cursor.close() + conn.close() + return results + + +def read_mysql_to_csv(filename): + with codecs.open(filename=filename, mode='w', encoding='utf-8') as f: + write = csv.writer(f, dialect='excel') + results = sql( + ini.get('message', 'sql') + ) + for result in results: + write.writerow(result) + + +def upload_file_robots(filename): + url = "https://qyapi.weixin.qq.com/cgi-bin/webhook/upload_media?key=%(key)s&type=file" % {"key": wecom_key} + data = {'file': open(filename, 'rb')} # post jason + response = requests.post(url=url, files=data) # post 请求上传文件 + json_res = response.json() # 返回转为json + media_id = json_res['media_id'] # 提取返回ID + return media_id # 返回请求状态 + + +def send_file_robots(media_id): + wx_url = 'https://qyapi.weixin.qq.com/cgi-bin/webhook/send?key=%(key)s' % {"key": wecom_key} + data = {"msgtype": "file", + "file": {"media_id": media_id}} # post json + r = requests.post(url=wx_url, json=data) + return r + + +if __name__ == '__main__': + filename = ini.get('message', 'title') + time.strftime('%y%m%d') + '.csv' + read_mysql_to_csv(filename) + print(send_file_robots(upload_file_robots(filename))) diff --git a/projects/export_mysql_to_csv_send_to_wocom/pic.png b/projects/export_mysql_to_csv_send_to_wocom/pic.png new file mode 100644 index 0000000000000000000000000000000000000000..62188a16289fe69396bb4b8deab1e1e9ebb58d20 GIT binary patch literal 10218 zcmZX41yq#Z*7pqK0Mbe~2q@j1BOoCiQc6j83PTS_h;&FwH%dxM4Iy39F_d%aI?fHue?(0CSv~i3zJBJ9Dq8sfkJN5E~1YtEc9tPm!7?ZJqETcqd(# z$uGLhly~oz$q1G^VT8U--EhoYuHB%)*C#h#XNuYTI5s(_wd>08)LA9*+nqz8MiOj-iGJZV)zlkrze`$wiH!aUrSi`Vz}KPW(;Yew|YHp2V+ z`^!K03M-AK-5EldH?`W zd?)||^?r(aWV6x!w-qRq4f@|Q!1;mjrIw7MBI>PW=4xT#=w|KYF0$)>gz9R_MqAHa zPeobO%*lb%)ZFR41t-+u9~OW(R1{Touy8k}gF4tdx`{$1p8Z21iYh-;b3LQ`hs51Z z;+dX`I-QJ@s|B3^CqF0mGf6BuIy!Mzb4yW8S-F3+qkc&|vvzlP7Ukmd^z`KPwzxOq9cn?gAp-5CDW$^Z5vYvE?*YUAu~u^T)N^TK8L07NTB{Y9HPA6jr0fEyIRXvy7U8ldpicCJt z_&IH2m5Gk^h#tL|NM|R59vIuP+kvSVm=W~aRDouB{0gqJ8!Iomn5DnNX5y@LJHpLT z4go&$Ma}@o;T;O&>hTVdqlC^HaxHxQvC$>da$X%eKl+Pc?PbS)gQ4IiKx!>v7_u68n8h?7^kmi|T(%=*ajrboZg_Cv{pK|(UE4(HM>#(H{P z&Bnb}1qZvsQKjn+ZZOlF>KF?kACovRE=VD;;9i%x^Xb>coJHz0%vXI{hf$3-qPDMF z_1CqsrO}C6ug>MY98P^)#|1tv1oY=}XESaWD&MNm_-rsWu6BQ0PZ(*9zx6&~iV;7{ zJ>8j=IbY1P)B7^(wmHC6-fVE|Jv-)Balq?#{?2RXm&So!vQ3gPsKvPO_TXNo!tK6f zx?*Wru6JsndY#SuD88VY*|Q}5vRT#f=apuO)(f`poMK?Goy9Q1E4~R@a_yI%ezSeo z=u-23{dGEIq4W)cQOy%1Xg4S8>T2L!kyCRv-avI3dFV?-fQ z)$lmq5Qeis)_OFTK*~j(gLn)2f;0h#y?eeWU%#3gzoizLZF_zj#ORQ4`TqDK?S1%O zo3UDIy-8g2-LPI8wT^J*$@Spu@#IB9fqeaNwfn5=rQqG0U87flYaPuPTakkxbVeMc> z8>D)7D(>fpoxg&^VkhPo*VW48oBcOC;#I&~JVJ=j(Mg5jr4H|9vJK}WBPNbCfwOh| zty`h(+xnJ{=n64t2=!cT+{dfavHarQ*@LfEgDLwb^}@XS@L=`L$HMgxtPIiy(~s#3 zcSWuO3qv}2Q+UypacEwt!3Gv|k?=lU#2zj9!ca3;+kkkfBw zeK26AVrp)>`T2G|$W1lba`vT-?GAsE#w|Qxerat7X!S4Jldd?lz_b+-bS7W?)4fR_rqbho`#0~={vJ##X zHMBPNwJCq`?Do%BynE+qpG7z~joZv`pLc>&y=$qcIxnc%=>?+{9DR~Ok4?%ISJ0@G zACAqF&Tp%?mLZbDq5t#U@yT(%#;RO=Mh3?u@;Mb|a+7n4=q~nj-*a6~yd@UzQk&Xt z8HNeQ!LA69GnN?jV->cSd++mD2}m1kb~)07&P-`;?-)yl44-DM~bve^*tJsVE{I~mwulOQ*i?JuF$9x~{XR-vOZx^zZ0NZpIDjtP9iqGxnty zLUDJ9vC})TUhM%yNRbL0q?UC~(>ilCj_XdvzlO0H5bW+BiM)p2em5v9J)t*zgk`#q0GfjGwYvFo8pr)}qVx{i7TuiCL&%5{2 zi_8-my`pF_#pDH#$71y87A=IT{fgS|!rH952&+vr%GIW&yd3BHM%q+8Z+!>_`YI~O+@mjOI-hoW zyvs@jy;!mEUo;?9ZTekraG+SuxyGoxfTnIpgst<~(yzBKT0evtc429WWv>+2&>01y z@zgeMJieO0W!~bLHf)`Av!2Xte0SeQ8rCmmkc0&LI>CSHYO2 ziy-9*VVn+G#Q9SRmpC zv%Y>9J++ueEFQJ% zje=o$`iuG*TxNc2bz@X~u$CFrA*tt;!}Sk_6OiHC^yxyxQOjVlSzqhV5muI1DQLun z5X5p_SJZp|t6xILNBLX@tE&6!q2D;;MDNqbjk7@N|&^Nr~W!~S}W3y9Fr^Fm9~ayX4`f37Y`mD-biY9p#M zbifrOwbqeU;l2}}HOW{Ljk|OO{fVHX#|YlZ$sBYKFJ^)z?Kavfw5l+Rpt5R6)~Ghu zOSk-;hDO_Bj=_hLKX6iq8KE7MQd3_DEiXdlTT zY1$?%GZZG}Z>BE%z&+R|U}h-_!ntw(ygD8}Vm=p-6BBhzC1jA=>s{j@)%IEY*SSjI zga#d_vr@)DEuR2bInZ5Wxq^( zIxpHB@yx$UL)%6jxj1em-J0HO(Qy!QHx&Hpu_v{`%FjaMQTwxALZ+nqJ;_(-$;PW!8pD$hul^RbE(WeTOeNS~Xnn)U+%gY~bMvWkma~Nf+aYD37M%pK-U>}unz1@_S=#Lx zAX1jOeT3SJl0wbeQmn8tQN89>LTGpco>(Eue2n2}vJOzEaPFTSFmg4^?zgL6(c)b} zMZP_cgedCN`Jd31P>&NS(11&X2z6p#BS-xC z8>pv+>P+1qj2wg!LqO(aHZT0tQhicfh%4mwVTiJ9*>E)Lxg|NW&&k~s&cL6|&Ei?zmzqg8K|yE%SMX?F z$mkW~>23Jj(YQ{ala*@R%Mk=Swl1e4D{k7f9s317)ia+O4)58^b5W7ADHs)ZCy^u6 zA|J#@Ede$svon#)42r26bUQhoq17_EW{Zt9kpY|dtc(je1-wK&N!Buy3%3x>h#kv%XT9XDy0=LM?G5Vn!!rB?I{5 z=EfIa;#eP$=IvT)(;;5J6mV}iV)|_tfq2)rU6?Ly@u^Je?(gcT|62Ec{Sqfv+f8-F zM}^<^$7_AO)}wTX!*Xndss3k^x&wQ&KRV+NTP}<)H`1Lt#_S)~jQ$Fkx1;jrvOk7V zK9H+fc#NkoviMa{)M+r>p*;vZ*5c#YxLe+I6E0{oCL1&W#Gs;s?6+JjCKM1?xL;zd*#06P+Ff7R|_M9TqLGa zOr1=VOc>tT5}lgVZ4Cmt8r8bRHzLl^c6Vi0V{5wIc6v%D(<&b4)rizR)ebbu zYMs~3<0brj-l?t95~yA8xZs-wGRCq+W%F?Xx4XuYet(fGX?xSj z#{P}>)mwT(V2a(;&k?bV za(#=BnJ=}-=2tiIkc*{&fI}6B{ouacrM5QZufo5ZO66(&-1S_Vi}in4_U%@*9gJHI ze`OKduSpQU+R9tZ8z-oikD-yg&;E!Pk3j>4H#IpmABBct8?9CK(6FK4t5%%RTVyA` zMSmhowd?w8{6Ci`o7V!d&1X|@*TY|AA}ug*$d)?|+g9(E1J8G-)yiAW4I2M^W;35G zedF5k_(iYO-4XtwK9IfcNN~R1iFU)r&|}u(c*ZP7vBIe3k?^-D8VQ48$!q%+iofS* znzqo!;Qor%t5TGqdp`c{z~)Ny*q>8eYW1s4F<$jk%@BQKQ13`RC8tL}&jWs%4WOZD zBL%w#=dV`4iB-q``_*|to}jHM2jCQwD}(Qy$G@j>LGmxn{2zkJyfSK z={#t=_opqzqZAxGjG+=4J0xta{_45twdm%3vEX@o*Y_f8Zva@Nr6w_n-HZzND*~?( zi3_4=H9c(p;sL<{cp%76;ucghEWC=-xKsL#k&jOcX%IM%nrwe$j#1}fh3Rs`Tge>n zQNU*Xl0O@%p}PjRzU2Ll8$P$YY}>NX%xa7j=Vqo)IpEg&Y^U!RsqtRm?OK9bXl?r? zNN9{w$dM|EwDIE$aVXMcHBY?(iidDT|;1$lO5>sevB-vEI~S&+xC#lOG(g97 zmN@QZxO=NGzOA%3RuG}afa8anW}U~iR7g!>JBrH%X2_Mhj|8Kk?@;=Ipq#3XKicet)SP zk-U}_ODsr7bJ3!sH)Y90Um>BsgYp&BF1Gk!W4rvVwixggaLhk!y&ev8JKLSU5TZjy zSi(PX?_cd!T&!?>K=N;qYMG$#q6uDsABQ~7acW#oszh>b34nKB%@=YZGdvfch<6LmLo024l$)n{MV{h^)4dV(YtN<4xZ>>zrOhY$% zy%I+28_>s6^z|9a7wNv2>&bUY;iH+qD+txZUEYS(`fAZxf}f%Z4O8?Ilt0lmyZI?a zmV4Eud9%_DjE6dNwf@Zw!ygx~vkcZdt$5=2H1kh}q4#z{^#ErR(YMeGqOWxwkPciS z1Oco3jN&~FO#+3V1&n*FJDPg;dR2I-_pYM1dVN;6;>ll(C_f2WbR&Qm4H^A$U8KK; zctt0^l(;sLQz9o?B*9rfTSX!swP-I-57lZD&X!F6NU%CFKCvINL7(rbQQB%Ko+V`= zM1)vDL9cYPA6KSFsLuNLv!$#&uXRH{R`NZ3))H!Q-0aXEx!!I}WoJ&q%IFT=apY@$ z97|l`ls`E(!QJh6cP1^X(PG0sN$`Sa-%UG1gI-X0-R|-ANAT<@L2-S_EG%;DU?-L) zOk@0v(>a&DzCW>$Smf-c$j~R&9U7B>L)_vgyltpOl$}`N)C>y z<7!-cDzaZQ9@J+#9~_};cn;D*0$XLoRm!`p)X5Eo2Q;)Pn&li210^XrxVmcfN zzTR)+E>x|r43jCZSPM(s)c8E@wU*}@~D?H&20Wty?Yd7Bx>CfLT+61lZE z!+z7|3rYF8E4#t5K`Hq?12Et|kgQo*{EcD5MmCQ+fkP$Cm1+G|q02rjn1$;dLw1J} zNar_uHSY5_AgNYH?kir@LT!AxDRsYnJ%~h*5t$ZemOKxm@h-+7B@8A14i}pg37Xh+ z`(-!2Es&r3#W>I<;YHuI*7HkrM+$C*(x$uJY}_56H2&WHB$ku=*di%^j+8Gt^E@qy zUOSPE)k@b>79^3BA1OnIp_a2J4r-Wvj8heDcXLY+cubt4IB%iBqZd_Ufhy3>M6~_{ zwXiyhTX|*Q^}@U?jFdkmE2+*WC+TA!@g?;l!lrI4iJ1uuR*n#U7Yma3T(L;y>nv$v zgq%&sn91dS?GPNp7!4=jX01%GszWV2eDKF@Jh8Q>&C&fw zreyZaxqKrA@_@;Nc>TO2#LYRw@!!A6emNd0^Sv0llB`hA+rvgk;ozkmmim!ST_*3z z0e-y^UF=&Ul1FKut}UgPyWb3^3ys|KV=fa!qjwS)dT{rLzUU?d0tf+Y5j<~#6~Bu% zk(==J%hMw2a8g{{>;edBa2AymO?erzZ|2Y{ehm^aN1#=~qgKC;T{Aa&!CzH-_~o27 ze#mCmuT{yz_} zsc01qPCh8wKkMhFq!>ycG`dWCQZRmsg>*- zlf}=ka+<$@e+TGNvnD>LTo0lg9gCBh3eL90;3De3wb%$NG5|y2Z&*Oa#gpQ)zfEsQHxbn0<^vcW=Ot!8E zpgj4ex8;);UH7EOt=>{Outo=#WlBA}epvl1pccWmVbka{s1@I28B*hf&>R-a-|`CH zW>?p40J71jebfytLeC~LfvMz#Let9Uv4mmhRQk+>B7~9|A@z1b;P)EYbthAf66f!i zx;XM^<0i{1INB;9j?mSYSsp8aFONgKj7UhaQvjOI^td3)osgCGqh2~XIm-N#bQzLk zJ!=`$Ey_x%hg{MT{Ih1^&G6QTnhL44$&~}6+g)l3Mm(1jgrGfw(PzUwp72~E7ty15 z_L&@j%e|6Qk_^tC>6QUmL$IB2Ag`o9^Cp5(P9Ljji*g6Zlk+{K#43S12mTZr=r|4X z#(&>OUhi+!yvH3j5Z9$i;~p!*-wr6}A9mFHt}M!^?czM2YeZ)H0*U6nQ}BBU9S}%t zv$pyr?z{)_>MragpKz?YkkjHJzc<;%>bg4lR#s2rwT(M=P!}mWA;1SlF=sP^JKn#7J;9*`QjI>V>6)mRH$yj<<0Yu3SAy|iB2^+MjMW>R$I_4lm~ z8ITcd)CP#V$Yvo|`1WE@5wGnHmUadi?3B4o?t!SU=4;fV2#8av9<3D4TWDZc9u?DN zPV^Jn1QNtZ{+aZKeiXOn`AbG0!l}OIqS$O5j7%x|b^OS1u{R&NE)EbF@n%roka%o~ z@=mM~R`7>tAja7kfErsJNQA=-;PK07>DQ*IT+ukn*Fl{;N$I&(IMCI-1f^_#GDAhA zvN3147fB7q#=XzZT*W2d?OtL1gJ_LO2Xc?#egc~o&`@k+H9=u$CSc>d9)?aJ8-8*Z z5@9)#x!Md^PsuVVH#_HN#5@o7jHxlYo<$)OH!oNFN`BK+q;!fsivLHc zOe|;vkb^{e_%lF{-{$d$wyPaBDRuZY;RLb)xdS{Y+ zVrCDUM+oX~Ud>PDuO7^BM)c{i<4v^N$wph|RGfFRlNHrBwDzLfuDPU1H5IT41Sz!8 z=Ss}e&hbM>MgL237W?%3&8iIIQBQkhKFN>MHvn{akok|4<*8zS!#=}0O`Y$0Zvn?9iuzF+JTa_#l&))%wb6;Fb4S(`Cs8Y&uGJbGga9FXq8> zmk-+gVumn(?m?fionrQW1^Go);#<~@Q-4f7Wy{or27NCsp7`oo3kqOXv$LeF;2?{R z?-t{(v9C7H$}nEnr7NtgIUY!m)Ft!%E~Z%qf*D1yjC4kg)!r@X~DX>e+qcWm$;>Z(su+I3@Ia|(B ziNfX^9E3^;1L(j{?LzR?->XAf_yFBX9sm-X6mORaGobHIiAJWcN>Ov&P+clZEHla* z;hO$pG`cSz!C+6YZ_NP8^|Mx#qc#*p#WwaJ4lw=o&i zG;f7zDWRq>N5X5eH($|2B!QIyia<;x_c4n+&0*E3`_%%o(qD4rO|qSKaLgg)52->3 z8ftJ%kW(n_(-{-g-H=>{WGo>%^w^o6Yfa~pBGgiGnO~(I3a+fuS$1I`vZ5RpedTjL zO{CC_3Wcr!^mS1XBrifbDpa9U0b~sem*f`!=b%NnpUpAjcNKs82wICnZ&t9%az%}? zn$6^1DdCpzv#``M*o27xJI~oyz!M{~ZKjtBfn@ecqU{%0X?4WPy0IEDzRTfN`1}H23sftO zDh=la!SO1nc~I^5Ebs)#%MJjKn!quZM~l!Ckz>6WkapfgrkK-g76gBkA4!M$*{SgJ zeK)GX>_XdF(Jv1s`CU|ytx*i*BFWCfh64=}!IoHD;zB!dg|WHi8}del-X`B|68uH_ z?b5O8dcEtMu<}1Y+=2L;Ph^Y5w;aL(g(Zb%>||8o!)owQ$!1Dibd`?!wu`mQiX8d5 zKGEm=)Ks*Ra@6E%&&m!`YT;20;}41Pw#Ir6c=U<+BTKPD5pD>@rGe^-oY%tCxgsAQ zm^BaWyz`RruQrerJyOq|k}Fai0#5AJn$bXq0BcSB06n<`Adj?)^&y#)r}J5_%i;H+ Ztfk@Ly_;JR)EzH?;wx3za%q#G{{aGyKYIWG literal 0 HcmV?d00001 diff --git a/projects/export_mysql_to_csv_send_to_wocom/requirements.txt b/projects/export_mysql_to_csv_send_to_wocom/requirements.txt new file mode 100644 index 000000000..365a6b592 --- /dev/null +++ b/projects/export_mysql_to_csv_send_to_wocom/requirements.txt @@ -0,0 +1,17 @@ +certifi==2021.10.8 +charset-normalizer==2.0.7 +configparser==5.0.2 +idna==3.3 +importlib-metadata==4.8.1 +Jinja2==3.0.2 +MarkupSafe==2.0.1 +prettytable==2.4.0 +pyecharts==1.9.0 +PyMySQL==1.0.2 +requests==2.26.0 +simplejson==3.17.5 +typing-extensions==3.10.0.2 +urllib3==1.26.7 +wcwidth==0.2.5 +xlwt==1.3.0 +zipp==3.6.0