真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

Python的SanicDB有什么作用-創(chuàng)新互聯(lián)

本篇內(nèi)容主要講解“Python的SanicDB有什么作用”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“Python的SanicDB有什么作用”吧!

創(chuàng)新互聯(lián)公司主要從事成都網(wǎng)站建設(shè)、做網(wǎng)站、網(wǎng)頁(yè)設(shè)計(jì)、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)賈汪,十年網(wǎng)站建設(shè)經(jīng)驗(yàn),價(jià)格優(yōu)惠、服務(wù)專(zhuān)業(yè),歡迎來(lái)電咨詢(xún)建站服務(wù):18980820575

SanicDB 是為 Python的異步 Web 框架 Sanic 方便操作MySQL而開(kāi)發(fā)的工具,是對(duì) aiomysql.Pool 的輕量級(jí)封裝。Sanic 是異步IO的Web框架,同時(shí)用異步IO讀寫(xiě)MySQL才能更好發(fā)揮它的效率。雖然這個(gè)模塊叫做 SanicDB,但是它可以用在任何異步IO操作MySQL的地方。

SanicDB的靈感來(lái)源于tornado里面的對(duì)MySQLdb(MySQL的C語(yǔ)言接口的Python封裝)的操作,后來(lái)tornado把它去除了,就有人把這部分代碼寫(xiě)成一個(gè)單獨(dú)的模塊叫做 torndb,torndb是對(duì)python-mysql的封裝,不能進(jìn)行異步操作。但是它很簡(jiǎn)潔,用起來(lái)已經(jīng)非常習(xí)慣了。

在用Sanic的時(shí)候,發(fā)現(xiàn)有異步IO的aiomysql可以用,但是用起來(lái)還有點(diǎn)麻煩,于是就著手對(duì)aiomysql進(jìn)行封裝,既然aiomysql支持連接池,那就直接封裝aiomysql.Pool吧。

首先,看看它的初始化

class SanicDB:"""A lightweight wrapper around aiomysql.Pool for easy to use
"""def __init__(self, host, database, user, password,
 loop=None, sanic=None,
 minsize=3, maxsize=5,
 return_dict=True,
 pool_recycle=7*3600,
 autocommit=True,
 charset = "utf8mb4", **kwargs):'''

前面4個(gè)參數(shù)是對(duì)應(yīng)數(shù)據(jù)庫(kù)的;

loop 是你的應(yīng)用程序中的事件循環(huán)(event_loop);

sanic 是你的Sanic 應(yīng)用中的sanic 對(duì)象;

loop 和 sanic 兩者只需提供一個(gè)即可,當(dāng)同時(shí)存在時(shí),連接數(shù)據(jù)庫(kù)其實(shí)用的是sanic里面的loop,這在__init__()代碼中可以看到。

minisize 和 maxsize 是連接池的個(gè)數(shù)限制;

return_dict 是返回的數(shù)據(jù)一條記錄為一個(gè)dict,key是MySQL表的字段名,value是字段的值;

pool_recycle 是連接池重連的時(shí)間間隔,MySQL默認(rèn)的連接閑置時(shí)間是8小時(shí);

對(duì)MySQL的讀寫(xiě)操作方法:

async def query(self, query, *parameters, **kwparameters):

async def execute(self, query, *parameters, **kwparameters):

async def get(self, query, *parameters, **kwparameters):

從代碼中可以看到,以上三個(gè)函數(shù)都是調(diào)用的cursor的execute() 執(zhí)行 SQL 命令,但是query(), get() 用于讀操作返回?cái)?shù)據(jù),query返回全部數(shù)據(jù)(list),get只返回一條數(shù)據(jù)。

execute() 方法用來(lái)執(zhí)行寫(xiě)操作,返回受影響的行ID。

上面三個(gè)函數(shù)都是一樣的:

query 是要執(zhí)行的SQL語(yǔ)句, 后面兩個(gè)參數(shù)是用來(lái)參數(shù)化執(zhí)行sql語(yǔ)句的。參數(shù)化執(zhí)行sql是為了防止SQL注入的,那么參數(shù)化執(zhí)行SQL是什么意思呢,舉個(gè)例子就目標(biāo)了。

比如,進(jìn)行用戶(hù)登錄時(shí),我們要執(zhí)行一條SQL,Python拼接SQL如下:

sql = "select * from user where name='%s' and password='%s'" % (input_name, input_password)

input_name 和 input_password 都是用戶(hù)輸入的,如果用戶(hù)想搗鬼,他把input_name 輸入成 “ ‘ or 1 = 1 –”,拼接出來(lái)的sql就成了:

select * from user where name='' or 1 = 1 --' and password='anything'

or 后面的 1=1 就是True,而 — 后面都成了注釋?zhuān)@條語(yǔ)句不管input_name, input_password 是什么都可以執(zhí)行,通過(guò)用戶(hù)驗(yàn)證,達(dá)到了注入目的。

參數(shù)化執(zhí)行SQL就是把拼接SQL的任務(wù)交給SanicDB(實(shí)際上是它后的aiomysql后面的pymysql),我們只把要拼接的參數(shù)當(dāng)做*parameters傳給讀寫(xiě)方法即可:

mydb.query("select * from user where user=%s and password=%s", input_name, input_password)

更高級(jí)的封裝:

query(), get(), execute() 就是基本的操作,在此基礎(chǔ)上,做了進(jìn)一步封裝,讓寫(xiě)應(yīng)用更方便:

# 檢查一個(gè)table中是否含有某字段為某值的記錄async def table_has(self, table_name, field, value): # 把一個(gè)item插入一個(gè)表,item為dict,key是字段名,# ignore_duplicated為T(mén)rue時(shí),遇到唯一索引重復(fù)時(shí)不報(bào)錯(cuò)async def table_insert(self, table_name, item, ignore_duplicated=True): # 更新一個(gè)table的記錄,updates是dict,key為字段名async def table_update(self, table_name, updates, field_where, value_where):

到此,相信大家對(duì)“Python的SanicDB有什么作用”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是創(chuàng)新互聯(lián)網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢(xún),關(guān)注我們,繼續(xù)學(xué)習(xí)!


網(wǎng)站題目:Python的SanicDB有什么作用-創(chuàng)新互聯(lián)
標(biāo)題URL:http://weahome.cn/article/coohjp.html

其他資訊

在線(xiàn)咨詢(xún)

微信咨詢(xún)

電話(huà)咨詢(xún)

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部