Python 十六进制转Base64_马克的Python学习笔记#数据编码与处理 4
同關(guān)系型數(shù)據(jù)庫進(jìn)行交互
在Python中,表達(dá)行數(shù)據(jù)的表尊方式就是采用元組序列。當(dāng)數(shù)據(jù)以這種形式呈現(xiàn)的時(shí)候,通過Python標(biāo)準(zhǔn)API來同關(guān)系型數(shù)據(jù)庫進(jìn)行交互相對來說就顯得很直接了。這個(gè)API的要點(diǎn)就是數(shù)據(jù)庫上的所有操作都通過SQL查詢來實(shí)現(xiàn),每一行輸入或輸出數(shù)據(jù)都由一個(gè)元組來表示。
我們可以使用sqlite3模塊,如果正在使用一個(gè)不同的數(shù)據(jù)庫,就需要安裝一個(gè)第三方的模塊來支持。但是,底層的編程接口即使不完全的話也差不多事一致的
第一步就是連接數(shù)據(jù)庫。一般來說,要調(diào)用一個(gè)connect()函數(shù),提供類似數(shù)據(jù)庫名稱,主機(jī)名,用戶名和密碼這樣的參數(shù)以及一些其它需要的細(xì)節(jié),舉個(gè)例子:
>>> 然后我們創(chuàng)建一個(gè)游標(biāo)
>>> 要在數(shù)據(jù)中插入行列,可以這樣:
>>> 要執(zhí)行查詢操作就可以這樣:
>>> 簡單地說,同數(shù)據(jù)庫的交互其實(shí)是一件非常直截了當(dāng)?shù)氖虑椤V灰M成SQL語句然后將它們傳遞給底層的模塊就可以更行數(shù)據(jù)庫或者取出數(shù)據(jù)了。但有些時(shí)候我們會(huì)遇到一些比較棘手的問題,比如我們需要將數(shù)據(jù)庫中的數(shù)據(jù)映射到Python的類型中。對于像日期這樣的條目,最常見的就是使用datetime模塊中的datetime實(shí)例或者time模塊里的時(shí)間戳
對于數(shù)值類的數(shù)據(jù),尤其是涉及小數(shù)的金融類數(shù)據(jù),這些數(shù)字可以用decimal模塊中的Decimal實(shí)例來表示
注意,我們絕對不應(yīng)該用Python的字符串格式化操作符或者.format()方法來創(chuàng)建SQL語句的字符串,這樣很容易遭受SQL注入攻擊
對于簡單地將數(shù)據(jù)從數(shù)據(jù)庫表項(xiàng)中取出和輸入,使用數(shù)據(jù)庫API就完全足夠了。如果要處理更加復(fù)雜的任務(wù),那么使用一種更高層次的接口就顯得非常有意義了
編碼和解碼16進(jìn)制的數(shù)字
我們需要編碼或解碼由16進(jìn)制組成的原始字符串,我們可以使用binascii模塊:
>>> 當(dāng)然,你用base64模塊也不是不行:
>>> 對于大部分情況來說,采用上面給出的函數(shù)對16進(jìn)制數(shù)進(jìn)行轉(zhuǎn)換歐式簡單直接的,而這兩種技術(shù)的主要區(qū)別就在于大寫轉(zhuǎn)換。base64的方法只能對大寫形式的16進(jìn)制數(shù)進(jìn)行操作,而binascii模塊能夠處理任意一種情況。
注意:當(dāng)解碼16進(jìn)制的時(shí)候,b16decode()和a2b_hex()函數(shù)可接受字節(jié)串或者是Unicode字符串作為輸入。但是,這些字符串中必須且只能包含ASCII編碼的十六進(jìn)制數(shù)字
Base64的編碼和解碼
用b64encode()和b64decode()這兩個(gè)函數(shù)就好
>>> Base64編碼只能用在面向字節(jié)的數(shù)據(jù)上,比如說字節(jié)串和字節(jié)數(shù)組,此外,編碼過程的輸出總是一個(gè)字節(jié)串,如果將Base64編碼的數(shù)據(jù)同Unicode文本混在一起,那么可能需要多個(gè)解碼步驟。
參考書目:
《Python CookBook》作者:【美】 David Beazley, Brian K. Jones
Github地址:
yidao620c/python3-cookbook?github.com總結(jié)
以上是生活随笔為你收集整理的Python 十六进制转Base64_马克的Python学习笔记#数据编码与处理 4的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 快递30斤多少钱啊?
- 下一篇: 歇后语仇人相见下一句是什么呢?