整合營(yíng)銷(xiāo)服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢(xún)熱線:

          Python向微軟Access數(shù)據(jù)庫(kù)插入內(nèi)容方法

          Python向微軟Access數(shù)據(jù)庫(kù)插入內(nèi)容方法
          import pypyodbc
          sql_path=r"mybt.accdb"
          conn=pypyodbc.connect(u'Driver={Microsoft Access Driver (*.mdb, *.accdb)};DBQ=' + sql_path)
          cursor=conn.cursor()
          table_name="表名"
          sql=f"INSERT INTO 表名 (1,2) VALUES ('demo1','demo2');"
          cursor.execute(sql)
          conn.commit()
          cursor.close()
          conn.close()
          #Access數(shù)據(jù)庫(kù)并不適合大型數(shù)據(jù)使用,一般用來(lái)存儲(chǔ)一些小批量信息,如爬取某些電影的磁力
          #鏈接進(jìn)行保存。分別存儲(chǔ)電影名稱(chēng),演員,鏈接,時(shí)長(zhǎng)等信息。以及記錄鏈接分享日期。

          .使用該代碼需要先安裝pypyodbc庫(kù)。在dos窗口輸入以下指令

          pip install pypyodbc

          2.在微軟官網(wǎng)下載相應(yīng)驅(qū)動(dòng)分為32和64位版本。

          下載地址:https://www.microsoft.com/zh-cn/download/confirmation.aspx?id=54920

          3.相關(guān)參數(shù)詳細(xì)說(shuō)明:

          3-1. mybt.accdb為數(shù)據(jù)庫(kù)文件所在地址,后綴為accdb。

          sql_path=r"mybt.accdb"


          這是文件截圖

          3.2. 表名對(duì)于下圖中的表1

          table_name="表名"


          3.2詳圖

          3.3 INSERT代表插入內(nèi)容,表面對(duì)應(yīng)上面所說(shuō)的表名,第一個(gè)小括號(hào)內(nèi)1,2,分別指上圖中的表格里的1,2(你自己命名的,它對(duì)應(yīng)了相應(yīng)的數(shù)據(jù)類(lèi)型)。demo1,demo2表示改指令把demo1,demo2分別對(duì)應(yīng)1,2的位置插入。執(zhí)行結(jié)果見(jiàn)下圖。

          易錯(cuò):當(dāng)使用列表元素填充時(shí),外面一定要加“''”,否則執(zhí)行會(huì)報(bào)錯(cuò)(不會(huì)顯示報(bào)錯(cuò),因?yàn)椴患右?hào)符合Python語(yǔ)法)。

          sql=f"INSERT INTO 表名 (1,2) VALUES ('demo1','demo2');"
          sql=f"INSERT INTO 表名 (1,2) VALUES ('{a[0]}','{a[1]}');"


          這是執(zhí)行完指令后的結(jié)果

          ython開(kāi)發(fā)web服務(wù)的優(yōu)勢(shì)是開(kāi)發(fā)效率高,可能只需要java五分之一的代碼量。
          Python搭建web服務(wù)有許多框架,本文介紹Django和bottle兩個(gè)框架。

          Django

          安裝

          首先,安裝該框架


          安裝成功,版本是1.11.28. 框架的文件安裝在\python27\Scripts目錄下(搜索電腦中Python安裝目錄下的Scripts就對(duì)了)。

          建立項(xiàng)目

          先進(jìn)入\python27\Scripts目錄,建立項(xiàng)目jinanwx(名稱(chēng)隨便起)

          同一個(gè)目錄下可以看到新建立工程的目錄

          開(kāi)發(fā)自己模塊

          進(jìn)入python27\Scripts\jinanwx\jinanwx。新建我們自己的模塊

          jgotest01.py里面寫(xiě)簡(jiǎn)單的代碼如下

          模塊功能就是返回個(gè)json格式結(jié)果。

          修改urls模塊

          然后需要改urls.py模塊

          目錄文件如下

          就這么簡(jiǎn)單,新建一個(gè)文件再修改一個(gè)文件,就成了。

          啟動(dòng)服務(wù)

          回到上一級(jí)目錄啟動(dòng)服務(wù)

          啟動(dòng)成功,瀏覽器訪問(wèn)試試

          bottle

          開(kāi)發(fā)功能不是特別復(fù)雜的web服務(wù),可以考慮使用bottle框架,它比Django輕量。bottle例子在Linux下演示。

          安裝

          使用bottle框架首先安裝。一個(gè)指令搞定。

          # pip install bottle  
          

          進(jìn)入Python命令行import bottle,沒(méi)報(bào)錯(cuò)就是成功了。

          代碼

          我的web服務(wù)就一個(gè)文件bottleweb.py,代碼如下,一些解釋在代碼的注釋里

          #coding=utf-8  
          from bottle import (run, route, get, post, put, delete, request, hook, response, static_file, app)  
          import json  
          import MySQLdb #本例子需要操作數(shù)據(jù)庫(kù),否則可以不寫(xiě)這行,這個(gè)數(shù)據(jù)庫(kù)包pip估計(jì)安裝不會(huì)成功,我是用yum install MySQL-python成功的  
          import sys  
          reload(sys)    
          sys.setdefaultencoding('utf8')  
          
          import bottle  
          app = bottle.default_app()#處理靜態(tài)資源需要定義,沒(méi)有靜態(tài)資源可以不寫(xiě)這行  
          #搭建vue腳手架前后臺(tái)聯(lián)調(diào)時(shí)要下面兩個(gè)@hook內(nèi)容,否則會(huì)報(bào)跨域訪問(wèn)資源的錯(cuò)誤  
          @hook('before_request')  
          def validate():  
              REQUEST_METHOD = request.environ.get('REQUEST_METHOD')  
          
              HTTP_ACCESS_CONTROL_REQUEST_METHOD = request.environ.get('HTTP_ACCESS_CONTROL_REQUEST_METHOD')  
              if REQUEST_METHOD == 'OPTIONS' and HTTP_ACCESS_CONTROL_REQUEST_METHOD:  
                  request.environ['REQUEST_METHOD'] = HTTP_ACCESS_CONTROL_REQUEST_METHOD  
          
          
          @hook('after_request')  
          def enable_cors():  
              response.headers['Access-Control-Allow-Origin'] = '*'  
              response.headers['Access-Control-Allow-Methods'] = 'GET,POST,PUT,DELETE,OPTIONS'  
              response.headers['Access-Control-Allow-Headers'] = '*'  
          
          @route('/test2020/dist/<path>')#靜態(tài)資源在web服務(wù)下的地址,沒(méi)放前端的靜態(tài)資源這幾個(gè)route和app.route可以不寫(xiě)  
          def stat(path):  
              return static_file(path, root='./dist/')  
          
          @app.route('/test2020/dist/static/js/<path>')    
          def js(path):  #這幾個(gè)目錄我寫(xiě)成這樣是因?yàn)関ue打包完后目錄結(jié)構(gòu)就是dist 里面static等等  
              return static_file(path, root='./dist/static/js/')  
          
          @app.route('/test2020/dist/static/css/<path>')   
          def css(path):   
              return static_file(path, root='./dist/static/css/')  
              
          @get('/test2020/date')#返回某個(gè)表中的日期,看sql你就明白了  
          def helloins():  
              db = MySQLdb.connect("127.0.0.1", "yourusername", "yourpassword", "yourDBname", charset='utf8' )  
              cursor = db.cursor()  
              sql = "select DISTINCT date from testtable"  
              print sql  
              cursor.execute(sql)  
              data = cursor.fetchall()  
              jsondata={}  
              results=[]  
              for row in data:  
                  result = {}  
                  result['DATE'] = row[0]  
                  results.append(result)  
              jsondata['code']=0  
              jsondata['datas']=results  
              return jsondata  #返回json格式為了方便前端vue接收處理,其實(shí)返回各種類(lèi)型都可以  
              
          @get('/test2020/helloworld')  
          def helloworld():  
              return 'hello world!'  
              
          if __name__ == '__main__':  
              run(host='0.0.0.0', port=2020, debug=True, reloader=True)  
          

          bottleweb.py所在目錄執(zhí)行

          #python bottleweb.py
          

          web服務(wù)就啟動(dòng)了。瀏覽器訪問(wèn)http://127.0.0.1:2020/test2020/helloworld看效果。

          如果安裝了MySQL數(shù)據(jù)庫(kù)可以測(cè)試test2020/date的url是否能返回結(jié)果

          數(shù)據(jù)庫(kù)只要有下面的數(shù)據(jù)就可以

          前端頁(yè)面是這個(gè)樣子的,給用戶選擇某個(gè)日期。


          前端是用vue+vux來(lái)開(kāi)發(fā)的,開(kāi)發(fā)完打包打出的東西上傳到代碼中提到的dist靜態(tài)資源目錄下。
          如果覺(jué)得上面的代碼有點(diǎn)復(fù)雜,可以把所有route, app.route的東西刪除,把/test2020/date語(yǔ)句塊也刪除,把@hook刪除,MySQL的東西刪除,前端的東西也完全不考慮,就是最簡(jiǎn)單的bottle web服務(wù),相當(dāng)于hello world。
          建議盡量懂上面的代碼,涉及了靜態(tài)資源,數(shù)據(jù)庫(kù),是web服務(wù)必須的內(nèi)容。

          pip升級(jí)的坑

          分享一個(gè)遇到的pip的問(wèn)題,我Python版本很低2.6.6。本來(lái)通過(guò)安裝yum的epel,已經(jīng)成功安裝了好用的pip。但是每次我用pip命令,最下方都會(huì)提示升級(jí)

          You are using pip version 9.0.3, however version 20.0.2 is available.
          You should consider upgrading via the 'pip install --upgrade pip' command
          

          我執(zhí)行了pip install --upgrade pip升級(jí),然后pip指令就不能用了。而且升級(jí)了之后,在想安裝回低版本的pip就沒(méi)有對(duì)應(yīng)的安裝包了。yum只能找到20.0.2版本的(老版本會(huì)被覆蓋難道?)。

          http://bootstrap.pypa.io/2.6/get-pip.py  
          

          下載了get-pip.py也無(wú)法安裝成功。最后在上面的地址下載到了2.6版本的安裝文件,才成功安裝可以使用的pip。

          總結(jié)

          相比java,python開(kāi)發(fā)web代碼量少,需要安裝的庫(kù)少,如果能滿足功能和性能要求,python可能是更好的選擇。

          這篇教程中,我們會(huì)用 Python 的 PyQt 框架編寫(xiě)一個(gè)簡(jiǎn)單的 web 瀏覽器。關(guān)于 PyQt ,你可能已經(jīng)有所耳聞了,它是 Qt 框架下的一系列 Python 組件,而 Qt(發(fā)音類(lèi)似“cute”)是用來(lái)開(kāi)發(fā) GUI 的 C++ 框架。嚴(yán)格來(lái)講, Qt 也可用于開(kāi)發(fā)不帶圖形界面的程序,但是開(kāi)發(fā)用戶界面應(yīng)該是 Qt 框架最為廣泛的應(yīng)用了。Qt 的主要優(yōu)勢(shì)是可以開(kāi)發(fā)跨平臺(tái)的圖形界面程序,基于 Qt 的應(yīng)用能夠借助于各平臺(tái)的原生性在不同類(lèi)的設(shè)備上運(yùn)行,而無(wú)須修改任何代碼庫(kù)。

          想要學(xué)習(xí)Python。關(guān)注小編頭條號(hào),私信【學(xué)習(xí)資料】,即可免費(fèi)領(lǐng)取一整套系統(tǒng)的板Python學(xué)習(xí)教程!

          Qt 附帶了 webkit 的接口,你可以直接使用 PyQt 來(lái)開(kāi)發(fā)一個(gè)基于 webkit 的瀏覽器。

          我們本次教程所開(kāi)發(fā)的瀏覽器可以完成如下功能:

          加載用戶輸入的url

          顯示在渲染頁(yè)面過(guò)程中發(fā)起的所有請(qǐng)求

          允許用戶在頁(yè)面中執(zhí)行自定義的 JavaScript 腳本

          牛刀小試

          讓我們從最簡(jiǎn)單的 PyQt 的 Webkit 用例開(kāi)始吧:輸入 url,打開(kāi)窗口并在窗口中加載頁(yè)面。

          這個(gè)例子十分短小,連 import 語(yǔ)句和空行在內(nèi)也只有 13 行代碼。

          當(dāng)你通過(guò)命令行將 url 傳給腳本時(shí),程序會(huì)加載 url 并且在窗口中顯示加載完成的頁(yè)面。

          現(xiàn)在,看似你已經(jīng)有一個(gè)“命令行瀏覽器”啦!至少比 python 的 requests 模塊強(qiáng)多了,甚至比 Lynx 還略高一籌,因?yàn)槲覀兊臑g覽器還可以加載 JavaScript 腳本呢。但是目前為止還沒(méi)有跟 Lynx 拉開(kāi)差距,因?yàn)樵趩⒂脼g覽器的時(shí)候只能通過(guò)命令行傳入 url。那么,必然需要通過(guò)某種方式把需要加載的 url 傳入瀏覽器。沒(méi)錯(cuò),就是地址欄!

          添加地址欄

          其實(shí)地址欄的實(shí)現(xiàn)非常簡(jiǎn)單,我們只需要在窗口頂端加一個(gè)輸入框就夠了。用戶在文本框中輸入 url 之后,瀏覽器就會(huì)加載這個(gè)地址。下面,我們將用到 QLineEdit 控件來(lái)實(shí)現(xiàn)輸入框。鑒于我們的瀏覽器現(xiàn)在有地址欄和瀏覽器顯示框兩部分,因此還要給我們的應(yīng)用增加一個(gè)網(wǎng)格布局。

          到這里,我們已經(jīng)有一個(gè)瀏覽器的雛形啦!看上去和當(dāng)年的 Google Chrome 還有幾分相像呢,畢竟兩者采用了相同的渲染引擎。現(xiàn)在,你可以在輸入框中輸入 url ,程序便會(huì)將地址傳入瀏覽器,接著渲染出所有的 HTML 頁(yè)面和 JavaScript 腳本并展示出來(lái)。

          添加開(kāi)發(fā)工具

          一個(gè)瀏覽器最有趣也最重要的部分是什么?當(dāng)然是各種各樣的開(kāi)發(fā)工具了!一個(gè)沒(méi)有開(kāi)發(fā)者控制臺(tái)的瀏覽器怎么能算是瀏覽器呢?所以,我們的 Python 瀏覽器當(dāng)然也要有一些開(kāi)發(fā)者工具才行。

          現(xiàn)在,我們就來(lái)添加一些類(lèi)似于 Chrome 的開(kāi)發(fā)者工具中 “Network” 標(biāo)簽的功能吧!這個(gè)功能就是簡(jiǎn)單地追蹤瀏覽器引擎在加載頁(yè)面的時(shí)候所執(zhí)行的所有請(qǐng)求。在瀏覽器主頁(yè)面的下方,我們將通過(guò)一個(gè)表來(lái)顯示這些請(qǐng)求。簡(jiǎn)單起見(jiàn),我們只會(huì)記錄登錄的 url、返回的狀態(tài)碼和響應(yīng)的內(nèi)容類(lèi)型。

          首先我們要通過(guò) QTableWidget 組件創(chuàng)建一個(gè)表格,表頭包括需要存儲(chǔ)的字段名稱(chēng),表格可以根據(jù)每次新插入的記錄來(lái)自動(dòng)調(diào)整大小。

          想要追蹤所有請(qǐng)求的話,我們還需要對(duì) PyQt 的內(nèi)部構(gòu)件有更深入的了解。了解到,Qt 提供了一個(gè) NetworkAccessManager類(lèi)作為 API 接口,通過(guò)調(diào)用它可以監(jiān)控應(yīng)用加載頁(yè)面時(shí)所執(zhí)行的請(qǐng)求。我們需要自己編寫(xiě)一個(gè)繼承自 NetworkAccessManager 的子類(lèi),添加必要的事件監(jiān)聽(tīng)器,然后使用我們自己編寫(xiě)的 manager 來(lái)通知 webkit 視圖執(zhí)行相應(yīng)的請(qǐng)求。

          首先我們需要以 NetworkAccessManager 為基類(lèi)創(chuàng)建我們自己的網(wǎng)絡(luò)訪問(wèn)管理器。

          在這里需要提醒大家的是, Qt 的某些實(shí)現(xiàn)并不像想象中那么簡(jiǎn)單明了,比如說(shuō)從響應(yīng)中獲取狀態(tài)碼就十分繁瑣。首先,你得把請(qǐng)求對(duì)象的類(lèi)屬性作為參數(shù)傳入 response 的方法 .attribute() 中,.attribute() 方法的返回值是 QVariant 類(lèi)型而非 int 類(lèi)型。接著,需要調(diào)用內(nèi)置函數(shù) .toInt() 將其轉(zhuǎn)換成一個(gè)包含兩個(gè)元素的元組,最終得到響應(yīng)的狀態(tài)碼。

          現(xiàn)在,我們終于有了一個(gè)記錄請(qǐng)求的表和一個(gè)監(jiān)控網(wǎng)絡(luò)的 manager,接下來(lái)只要把他們聚攏起來(lái)就可以了。

          現(xiàn)在,運(yùn)行瀏覽器程序,在地址欄鍵入 url,就可以看到在主頁(yè)面下方的記錄表中記錄下的所有請(qǐng)求。

          如果你有興趣的話,還可以為瀏覽器添加很多新的功能:

          通過(guò)content-type添加篩選功能

          添加記錄表的排序功能

          添加計(jì)時(shí)器

          高亮顯示出錯(cuò)的請(qǐng)求(比如說(shuō)把錯(cuò)誤信息置為紅色)

          顯示出更為具體的請(qǐng)求內(nèi)容,比如說(shuō)完整的頭信息、響應(yīng)內(nèi)容、請(qǐng)求方法等。

          增加一個(gè)重復(fù)發(fā)送請(qǐng)求并加載出來(lái)的選項(xiàng)。比如說(shuō)用戶可以點(diǎn)擊在記錄表中的請(qǐng)求來(lái)重試請(qǐng)求。

          其實(shí)還有太多的功能可以繼續(xù)完善和改進(jìn),你可以一一嘗試一下,這會(huì)是一個(gè)非常有趣而且收獲良多的學(xué)習(xí)過(guò)程。但是如果想把這些功能都說(shuō)完,估計(jì)都能寫(xiě)一本書(shū)了。所以限于篇幅,本文就不一一介紹了,感興趣的朋友可以參考其他書(shū)籍和網(wǎng)上教程。

          增加解析自定義 JavaScript 腳本的功能

          我們終于迎來(lái)最后一個(gè)功能了!就是解析在頁(yè)面中包含的 JavaScript 腳本。

          基于我們之前已經(jīng)打下的基礎(chǔ),要完成這個(gè)功能非常簡(jiǎn)單。我們只需要在添加一個(gè) QLineEdit 組件,把它和頁(yè)面聯(lián)系起來(lái),然后調(diào)用 evaulateJavaScript 方法就可以了。

          下面是這個(gè)功能的示例。看,我們的開(kāi)發(fā)者工具已經(jīng)整裝待發(fā)了!

          現(xiàn)在唯一缺少的就是在頁(yè)面中不能執(zhí)行 Python 腳本。你可以開(kāi)發(fā)自己的瀏覽器,提供對(duì) JavaScript 和 Python 的支持,這樣其他開(kāi)發(fā)者就可以針對(duì)你的瀏覽器開(kāi)發(fā)應(yīng)用了。

          后退、前進(jìn)和其他頁(yè)面操作

          我們?cè)谇懊嬉呀?jīng)使用了 QWebPage 對(duì)象來(lái)開(kāi)發(fā)瀏覽器,當(dāng)然作為一個(gè)合格的瀏覽器,我們也需要為終端用戶提供一些重要功能。Qt 的網(wǎng)頁(yè)對(duì)象支持很多不同操作,我們可以把它們?nèi)继砑拥綖g覽器中。

          現(xiàn)在我們可以先嘗試著添加“后退”、“前進(jìn)”和“刷新”這幾個(gè)操作。你可以在界面上添加這些操作按鈕,簡(jiǎn)單起見(jiàn),這里只加一個(gè)文本框來(lái)執(zhí)行這些動(dòng)作。

          和之前一樣,我們要?jiǎng)?chuàng)建一個(gè) ActionInputBox 的實(shí)例,把參數(shù)傳入頁(yè)面對(duì)象并把輸入框?qū)ο筇砑拥巾?yè)面中。

          Graphical User Interface,圖形用戶界面,又稱(chēng)圖形用戶接口,是指采用圖形方式顯示的計(jì)算機(jī)操作用戶界面。

          WebKit是一個(gè)開(kāi)源的瀏覽器引擎,與之相對(duì)應(yīng)的引擎有 Gecko(Mozilla Firefox 等使用)和 Trident(也稱(chēng) MSHTML ,IE 使用)。

          是不是很簡(jiǎn)單!


          主站蜘蛛池模板: 男人的天堂亚洲一区二区三区| 久久久久女教师免费一区| 国产一区二区三区免费观在线| 精品国产日韩亚洲一区在线| 日本精品少妇一区二区三区| 国产AV午夜精品一区二区三区| 久久久91精品国产一区二区| 3d动漫精品成人一区二区三| 国产人妖视频一区在线观看| 日本一区午夜艳熟免费| 日韩美女在线观看一区| 骚片AV蜜桃精品一区| 日韩精品无码久久一区二区三 | 亚洲日韩国产欧美一区二区三区| 精品一区二区三区在线观看l | 久久精品黄AA片一区二区三区| 人妻体体内射精一区二区| 精品人妻少妇一区二区| 天天综合色一区二区三区| 无码福利一区二区三区| 午夜DV内射一区二区| 激情综合一区二区三区| 国产成人高清视频一区二区| 国产一区二区三区日韩精品 | 一区二区三区四区在线观看视频| 精品成人一区二区三区免费视频| 国产在线精品观看一区| 国产精品一区二区毛卡片| 蜜臀AV在线播放一区二区三区| 成人无码AV一区二区| 日韩精品一区二区三区大桥未久 | 香蕉视频一区二区三区| 国产在线观看一区二区三区精品 | 蜜桃视频一区二区| 亚洲国产高清在线一区二区三区| 亚洲一区二区三区丝袜| 中文字幕视频一区| 在线|一区二区三区四区| 男人免费视频一区二区在线观看 | 国产精品男男视频一区二区三区 | 一区二区三区无码高清|