自己封裝的 Python 常用工具庫(kù)(prestool)

一、安裝

需Python 版本建議 3.7 以上

pip install --upgrade  prestool

二末秃、常用工具

from prestool.Tool import Tool
tool = Tool()

1概页、隨機(jī)數(shù)據(jù)

tool.random_name()  # 隨機(jī)姓名
tool.random_phone()  # 隨機(jī)手機(jī)號(hào)
tool.random_ssn()  # 隨機(jī)身份證

tool.random_string(16)  # 隨機(jī)位數(shù)的字符串
tool.random_number(8)  # 隨機(jī)位數(shù)的數(shù)字

tool.random_ua()  # 隨機(jī)UA
tool.random_ua('chrome')  # 隨機(jī)UA-Chrome
tool.random_ua('firefox')  # 隨機(jī)UA-Firefox
tool.random_ua('ie')  # 隨機(jī)UA-IE
tool.random_ua('opera')  # 隨機(jī)UA-opera
tool.random_ua('safari')  # 隨機(jī)UA-safari

2、編碼解碼

tool.url_encode('編碼前的url地址')  # 編碼
tool.url_decode('解碼前的url地址')  # 解碼

tool.base_64_encode('編碼前的字符串')  # base64編碼

3练慕、加密相關(guān)

tool.to_md5('原始字符串')
tool.to_hmac_256('原始字符串', '加密key')
tool.to_sha_256('原始字符串')

4绰沥、發(fā)送消息

# 釘釘
tool.ding_talk_token = '釘釘機(jī)器人token'
tool.ding_talk_sign_key = '釘釘機(jī)器人簽名key'
tool.send_ding_talk_msg('消息內(nèi)容')

# 企業(yè)微信
tool.qy_wechat_token = '企業(yè)微信機(jī)器人token'
tool.send_qy_wechat_msg('消息內(nèi)容')

# 郵件
tool.mail_from_user_host = '發(fā)件地址host'
tool.mail_from_user = '發(fā)件人郵箱號(hào)'
tool.mail_from_user_pwd = '發(fā)件人pwd'
tool.send_mail_msg(to_user='收件人郵箱地址(列表)', title='郵件標(biāo)題', content='郵件內(nèi)容')

5、時(shí)間相關(guān)

tool.time_stamp()  # 秒級(jí)時(shí)間戳10位
tool.time_stamp('ms')  # 毫秒級(jí)時(shí)間戳13位

tool.get_now_time()  # 獲取當(dāng)前時(shí)間 20201206000000
tool.get_now_time('-')  # 獲取當(dāng)前時(shí)間 2020-12-06 00:00:00

tool.date_to_time_stamp('2012-01-01 00:00:00')  # 時(shí)間字符串轉(zhuǎn)為時(shí)間戳
tool.time_stamp_to_date(1732312234)  # 時(shí)間戳轉(zhuǎn)為時(shí)間字符串

6贺待、格式轉(zhuǎn)換

tool.json_dumps({"test": "python字典"})  # 字典轉(zhuǎn)json
tool.json_loads('{"test": "python字典"}')  # json轉(zhuǎn)字典
tool.xml_to_dict('<xml><data>字符串</data></xml>')  # xml轉(zhuǎn)成python字典
tool.dict_to_xml({"test": "python字典"})  # python字典 轉(zhuǎn)成xml

7徽曲、http 請(qǐng)求

tool.http_client(url='', data={}, method='GET')  # get請(qǐng)求
tool.http_client(url='', data={}, method='POST')  # post請(qǐng)求

tool.get_cookies(url='接口地址', data={}, method='GET')
tool.get_cookies(url='接口地址', data={}, method='POST')

tool.trans_data_to_url(url='接口地址', data={})  # 把參數(shù)拼接到url上

8、dubbo 接口

tool.dubbo_args('參數(shù)1', '參數(shù)2', '參數(shù)3')  # dubbo接口參數(shù)
tool.invoke_dubbo('地址', '端口', '服務(wù)API名', '接口方法名', 'dubbo接口參數(shù)')  # 請(qǐng)求dubbo接口

9麸塞、其他

tool.logger('日志信息')
tool.get_ip_by_url('url地址')  # 獲取ip

三秃臣、數(shù)據(jù)庫(kù)語(yǔ)句(MySQL)

1、生成數(shù)據(jù)庫(kù) sql 語(yǔ)句

from prestool.PresMySql import SqlStr
sql = SqlStr()

2哪工、查詢語(yǔ)句

# target 不傳時(shí)奥此,為全部字段,即 *雁比,where={'key':'value'}
sql.select_sql_str(table='table1', where={'id': 1, 'name': '張三'})
select * from table1 where id = 1 and name = '張三';

# target=[i1,i2,i3] 時(shí)稚虎,為相應(yīng)字段
sql.select_sql_str(table='table1', target=['a', 'b', 'c'], where={'id': 1, 'name': '張三'})
select a, b, c from table1 where 1=1 and id=1 and name='張三';

# limit=10 limit='10,1000' 為篩選限制字段
sql.select_sql_str(table='table1', target=['a', 'b', 'c'], order={'age': 'desc', 'score': 'desc'}, limit=20)
select a, b, c from table1 where 1=1 order by age desc, score desc limit 20;

# where 條件中有的字段為 null 或者 not null 時(shí)
sql.select_sql_str(table='table1', target=['a', 'b', 'c'], where={'id': 1, 'name': 'null', 'age': not None})
select a, b, c from table1 where 1=1 and id=1 and name is null and age is not null;


# 支持排序語(yǔ)句
sql.select_sql_str(table='table1', target=['a', 'b', 'c'], order={'age': 'desc', 'score': 'desc'})
select a, b, c from table1 order by age desc, score desc;

# 支持查詢 in 語(yǔ)句
sql.select_sql_str(table='table1', target=['a', 'b', 'c'], select_in={'orders': [123121312, 123123445, 213123]})
select a, b, c from table1 where 1=1 and orders in (123121312, 123123445, 213123);

# 支持 like 語(yǔ)句
sql.select_sql_str(table='table1', target=['a', 'b', 'c'], like={'name': '%光', 'address': "中國(guó)%"})
select a, b, c from table1 where 1=1 and name like '%光' and address like '中國(guó)%';

# 支持 between 語(yǔ)句
sql.select_sql_str(table='table1', target=['a', 'b', 'c'], between={'age': (10, 20), 'year': (2021, 2022)})
select a, b, c from table1 where 1=1 and age between 10 and 20 and year between 2021 and 2022;

# 支持大于、小于語(yǔ)句
sql.select_sql_str(table='table1', target=['a', 'b', 'c'],
                       compare={'age': {'>': 10, '<': 20}, 'year': {'>=': '2021'}})

select a, b, c from table1 where 1=1 and age > 10 and age < 20 and year >= 2021;

# 更新語(yǔ)句
target 為要更新的數(shù)據(jù)偎捎,為字典結(jié)構(gòu) (支持大于蠢终、小于語(yǔ)句、between 語(yǔ)句茴她、like 語(yǔ)句寻拂、in 語(yǔ)句)
sql.update_sql_str(table='table1', target={'name': '李四', 'age': 15}, where={'id': 1, 'name': '張三'})
update table1
set name='李四',
    age=15
where id = 1
  and name = '張三';

# 刪除數(shù)據(jù)
支持大于、小于語(yǔ)句丈牢、between 語(yǔ)句祭钉、like 語(yǔ)句、in 語(yǔ)句
sql.delete_sql_str(table='table1', where={'id': 1, 'name': '張三'})
delete
from table1
where id = 1
  and name = '張三';
  
# 插入數(shù)據(jù)
sql.insert_sql_str(table='table1', target={'id': 1, 'name': '張三'})
insert into table1 (id, name)
values (1, '張三');

2己沛、執(zhí)行數(shù)據(jù)庫(kù)語(yǔ)句

from prestool.PresMySql import PresMySql

pres = PresMySql()
# 初始化數(shù)據(jù)庫(kù)信息
pres.mysql_host = ''
pres.mysql_port = 3306
pres.mysql_user = ''
pres.mysql_pwd = ''
pres.mysql_db_name = ''
pres.mysql_charset = 'utf8mb4'

執(zhí)行相應(yīng)語(yǔ)句即可慌核,執(zhí)行的方法參數(shù)等同于第三節(jié)所述的 sql 語(yǔ)句距境,如

pres.to_query(table='table1', target=['a', 'b', 'c'], between={'age': (10, 20), 'year': (2021, 2022)})
pres.to_insert(table='table1', target={'id': 1, 'name': '張三'})
pres.to_delete(table='table1', where={'id': 1, 'name': '張三'})
pres.to_update(table='table1', target={'name': '李四', 'age': 15}, where={'id': 1, 'name': '張三'})
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市垮卓,隨后出現(xiàn)的幾起案子垫桂,更是在濱河造成了極大的恐慌,老刑警劉巖扒接,帶你破解...
    沈念sama閱讀 221,888評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異们衙,居然都是意外死亡钾怔,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,677評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門蒙挑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)宗侦,“玉大人,你說(shuō)我怎么就攤上這事忆蚀》” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 168,386評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵馋袜,是天一觀的道長(zhǎng)男旗。 經(jīng)常有香客問(wèn)我,道長(zhǎng)欣鳖,這世上最難降的妖魔是什么察皇? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 59,726評(píng)論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮泽台,結(jié)果婚禮上什荣,老公的妹妹穿的比我還像新娘。我一直安慰自己怀酷,他們只是感情好稻爬,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,729評(píng)論 6 397
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著蜕依,像睡著了一般桅锄。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上样眠,一...
    開(kāi)封第一講書(shū)人閱讀 52,337評(píng)論 1 310
  • 那天竞滓,我揣著相機(jī)與錄音,去河邊找鬼吹缔。 笑死商佑,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的厢塘。 我是一名探鬼主播茶没,決...
    沈念sama閱讀 40,902評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼肌幽,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了抓半?” 一聲冷哼從身側(cè)響起喂急,我...
    開(kāi)封第一講書(shū)人閱讀 39,807評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎笛求,沒(méi)想到半個(gè)月后廊移,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,349評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡探入,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,439評(píng)論 3 340
  • 正文 我和宋清朗相戀三年狡孔,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片蜂嗽。...
    茶點(diǎn)故事閱讀 40,567評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡苗膝,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出植旧,到底是詐尸還是另有隱情辱揭,我是刑警寧澤,帶...
    沈念sama閱讀 36,242評(píng)論 5 350
  • 正文 年R本政府宣布病附,位于F島的核電站问窃,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏完沪。R本人自食惡果不足惜泡躯,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,933評(píng)論 3 334
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望丽焊。 院中可真熱鬧较剃,春花似錦、人聲如沸技健。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 32,420評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)雌贱。三九已至啊送,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間欣孤,已是汗流浹背馋没。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 33,531評(píng)論 1 272
  • 我被黑心中介騙來(lái)泰國(guó)打工, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留降传,地道東北人篷朵。 一個(gè)月前我還...
    沈念sama閱讀 48,995評(píng)論 3 377
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親声旺。 傳聞我的和親對(duì)象是個(gè)殘疾皇子笔链,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,585評(píng)論 2 359

推薦閱讀更多精彩內(nèi)容