一、爲了便於程序保存和讀取數據,並且,能直接經過條件快速查詢到指定的數據,就出現了數據庫(Database)這種專門用於集中存儲和查詢的軟件。前端
二、數據庫
在使用SQLite前,咱們先要搞清楚幾個概念:編程
表是數據庫中存放關係數據的集合,一個數據庫裏面一般都包含多個表,好比學生的表,班級的表,學校的表,等等。表和表之間經過外鍵關聯。瀏覽器
要操做關係數據庫,首先須要鏈接到數據庫,一個數據庫鏈接稱爲Connection;服務器
鏈接到數據庫後,須要打開遊標,稱之爲Cursor,經過Cursor執行SQL語句,而後,得到執行結果。網絡
Python定義了一套操做數據庫的API接口,任何數據庫要鏈接到Python,只須要提供符合Python標準的數據庫驅動便可。多線程
三、架構
使用Python的DB-API時,只要搞清楚Connection
和Cursor
對象,打開後必定記得關閉,就能夠放心地使用。併發
使用Cursor
對象執行insert
,update
,delete
語句時,執行結果由rowcount
返回影響的行數,就能夠拿到執行結果。app
使用Cursor
對象執行select
語句時,經過featchall()
能夠拿到結果集。結果集是一個list,每一個元素都是一個tuple,對應一行記錄。
若是SQL語句帶有參數,那麼須要把參數按照位置傳遞給execute()
方法,有幾個?
佔位符就必須對應幾個參數
四、
MySQL是Web世界中使用最普遍的數據庫服務器。SQLite的特色是輕量級、可嵌入,但不能承受高併發訪問,適合桌面和移動應用。而MySQL是爲服務器端設計的數據庫,能承受高併發訪問,同時佔用的內存也遠遠大於SQLite。
此外,MySQL內部有多種數據庫引擎,最經常使用的引擎是支持數據庫事務的InnoDB。
五、
這就是傳說中的ORM技術:Object-Relational Mapping,把關係數據庫的表結構映射到對象上。是否是很簡單?
可是由誰來作這個轉換呢?因此ORM框架應運而生。
最先的軟件都是運行在大型機上的,軟件使用者經過「啞終端」登錄到大型機上去運行軟件。後來隨着PC機的興起,軟件開始主要運行在桌面上,而數據庫這樣的軟件運行在服務器端,這種Client/Server模式簡稱CS架構。
隨着互聯網的興起,人們發現,CS架構不適合Web,最大的緣由是Web應用程序的修改和升級很是迅速,而CS架構須要每一個客戶端逐個升級桌面App,所以,Browser/Server模式開始流行,簡稱BS架構。
在BS架構下,客戶端只須要瀏覽器,應用程序的邏輯和數據都存儲在服務器端。瀏覽器只須要請求服務器,獲取Web頁面,並把Web頁面展現給用戶便可。
固然,Web頁面也具備極強的交互性。因爲Web頁面是用HTML編寫的,而HTML具有超強的表現力,而且,服務器端升級後,客戶端無需任何部署就可使用到新的版本,所以,BS架構迅速流行起來。
今天,除了重量級的軟件如Office,Photoshop等,大部分軟件都以Web形式提供。好比,新浪提供的新聞、博客、微博等服務,均是Web應用。
六、
Web應用開發能夠說是目前軟件開發中最重要的部分。Web開發也經歷了好幾個階段:
靜態Web頁面:由文本編輯器直接編輯並生成靜態的HTML頁面,若是要修改Web頁面的內容,就須要再次編輯HTML源文件,早期的互聯網Web頁面就是靜態的;
CGI:因爲靜態Web頁面沒法與用戶交互,好比用戶填寫了一個註冊表單,靜態Web頁面就沒法處理。要處理用戶發送的動態數據,出現了Common Gateway Interface,簡稱CGI,用C/C++編寫。
ASP/JSP/PHP:因爲Web應用特色是修改頻繁,用C/C++這樣的低級語言很是不適合Web開發,而腳本語言因爲開發效率高,與HTML結合緊密,所以,迅速取代了CGI模式。ASP是微軟推出的用VBScript腳本編程的Web開發技術,而JSP用Java來編寫腳本,PHP自己則是開源的腳本語言。
MVC:爲了解決直接用腳本語言嵌入HTML致使的可維護性差的問題,Web應用也引入了Model-View-Controller的模式,來簡化Web開發。ASP發展爲ASP.Net,JSP和PHP也有一大堆MVC框架。
目前,Web開發技術仍在快速發展中,異步開發、新的MVVM前端技術層出不窮。
Python的誕生歷史比Web還要早,因爲Python是一種解釋型的腳本語言,開發效率高,因此很是適合用來作Web開發。
Python有上百種Web開發框架,有不少成熟的模板技術,選擇Python開發Web應用,不但開發效率高,並且運行速度快。
在Web應用中,服務器把網頁傳給瀏覽器,實際上就是把網頁的HTML代碼發送給瀏覽器,讓瀏覽器顯示出來。而瀏覽器和服務器之間的傳輸協議是HTTP,因此:
HTML是一種用來定義網頁的文本,會HTML,就能夠編寫網頁;
HTTP是在網絡上傳輸HTML的協議,用於瀏覽器和服務器的通訊。
十一、
瞭解了HTTP協議和HTML文檔,咱們其實就明白了一個Web應用的本質就是:
瀏覽器發送一個HTTP請求;
服務器收到請求,生成一個HTML文檔;
服務器把HTML文檔做爲HTTP響應的Body發送給瀏覽器;
瀏覽器收到HTTP響應,從HTTP Body取出HTML文檔並顯示。
十二、正確的作法是底層代碼由專門的服務器軟件實現,咱們用Python專一於生成HTML文檔。由於咱們不但願接觸到TCP鏈接、HTTP原始請求和響應格式,因此,須要一個統一的接口,讓咱們專心用Python編寫Web業務。
因此application()
函數必須由WSGI服務器來調用。有不少符合WSGI規範的服務器,咱們能夠挑選一個來用。可是如今,咱們只想儘快測試一下咱們編寫的application()
函數真的能夠把HTML輸出到瀏覽器,因此,要趕忙找一個最簡單的WSGI服務器,把咱們的Web應用程序跑起來。
好消息是Python內置了一個WSGI服務器,這個模塊叫wsgiref,它是用純Python編寫的WSGI服務器的參考實現。所謂「參考實現」是指該實現徹底符合WSGI標準,可是不考慮任何運行效率,僅供開發和測試使用。
1三、在「發出IO請求」到收到「IO完成」的這段時間裏,同步IO模型下,主線程只能掛起,但異步IO模型下,主線程並無休息,而是在消息循環中繼續處理其餘消息。這樣,在異步IO模型下,一個線程就能夠同時處理多個IO請求,而且沒有切換線程的操做。對於大多數IO密集型的應用程序,使用異步IO將大大提高系統的多任務處理能力。
1四、
子程序,或者稱爲函數,在全部語言中都是層級調用,好比A調用B,B在執行過程當中又調用了C,C執行完畢返回,B執行完畢返回,最後是A執行完畢。
因此子程序調用是經過棧實現的,一個線程就是執行一個子程序。
子程序調用老是一個入口,一次返回,調用順序是明確的。而協程的調用和子程序不一樣
1五、
協程的特色在因而一個線程執行,那和多線程比,協程有何優點?
最大的優點就是協程極高的執行效率。由於子程序切換不是線程切換,而是由程序自身控制,所以,沒有線程切換的開銷,和多線程比,線程數量越多,協程的性能優點就越明顯。
第二大優點就是不須要多線程的鎖機制,由於只有一個線程,也不存在同時寫變量衝突,在協程中控制共享資源不加鎖,只須要判斷狀態就行了,因此執行效率比多線程高不少。
由於協程是一個線程執行,那怎麼利用多核CPU呢?最簡單的方法是多進程+協程,既充分利用多核,又充分發揮協程的高效率,可得到極高的性能。
Python對協程的支持是經過generator實現的。
在generator中,咱們不但能夠經過for
循環來迭代,還能夠不斷調用next()
函數獲取由yield
語句返回的下一個值。
可是Python的yield
不但能夠返回一個值,它還能夠接收調用者發出的參數。
1六、yield 的做用就是把一個函數變成一個 generator,帶有 yield 的函數再也不是一個普通函數,Python 解釋器會將其視爲一個 generator,調用 fab(5) 不會執行 fab 函數,而是返回一個 iterable 對象!在 for 循環執行時,每次循環都會執行 fab 函數內部的代碼,執行到 yield b 時,fab 函數就返回一個迭代值,下次迭代時,代碼從 yield b 的下一條語句繼續執行,而函數的本地變量看起來和上次中斷執行前是徹底同樣的,因而函數繼續執行,直到再次遇到 yield。