第二章 python基礎(三)

来源:http://www.cnblogs.com/zfc2201/archive/2017/06/22/7067670.html
-Advertisement-
Play Games

第十六節 MySQLdb "win64位安裝python mysqldb1.2.5" ubuntu下安裝MySQLdb sudo apt get install python MySQLdb 導入MySQLdb庫 import MySQLdb 創建資料庫連接 conn = MySQLdb.conne ...


第十六節 MySQLdb

  • win64位安裝python-mysqldb1.2.5

  • ubuntu下安裝MySQLdb

    sudo apt-get install python-MySQLdb
  • 導入MySQLdb庫

    import MySQLdb
  • 創建資料庫連接

    conn = MySQLdb.connect(host="localhost",user="root",passwd="123456",db="test",charset="utf8")
  • connect對象屬性
    • commit():如果資料庫表進行了修改,提交保存當前的數據。當然,如果此用戶沒有許可權就作罷了,什麼也不會發生。
    • rollback():如果有許可權,就取消當前的操作,否則報錯。
    • cursor([cursorclass]):游標指針。
  • 創建游標(指針)cursor

    cur = conn.cursor()
  • cursor執行命令的方法:
    • execute(query, args):執行單條sql語句。query為sql語句本身,args為參數值的列表。執行後返回值為受影響的行數。
    • executemany(query, args):執行單條sql語句,但是重覆執行參數列表裡的參數,返回值為受影響的行數
  • 在數據表中插入一條記錄

    cur.execute("insert into users (username,password,email) values (%s,%s,%s)",("python","123456","[email protected]"))
  • 在數據表中插入多條記錄

    cur.executemany("insert into users (username,password,email) values (%s,%s,%s)",(("google","111222","[email protected]"),("facebook","222333","[email protected]"),("github","333444","[email protected]"),("docker","444555","[email protected]")))
  • 提交資料庫操作

    conn.commit()
  • 查詢數據

    cur.execute("select * from users")
    • cursor對象獲取數據的方法
      • fetchall(self):接收全部的返回結果行.
      • fetchmany(size=None):接收size條返回結果行.如果size的值大於返回的結果行的數量,則會返回cursor.arraysize條數據.
      • fetchone():返回一條結果行.
      • scroll(value, mode='relative'):移動指針到某一行.如果mode='relative',則表示從當前所在行移動value條,如果mode='absolute',則表示從結果集的第一行移動value條.

        cur.execute("select * from users")
        lines = cur.fetchall()
        for line in lines:
            print line
        
        cur.execute("select * from users where id=1")
        line_first = cur.fetchone()     #只返回一條
        print line_first
        
        cur.execute("select * from users")
        print cur.fetchall()
  • 游標cursor的操作

    • cur.scroll(n)cur.scroll(n,"relative"):意思是相對當前位置向上或者向下移動,n為正數,表示向下(向前),n為負數,表示向上(向後)

    • 還有一種方式,可以實現“絕對”移動,不是“相對”移動:增加一個參數"absolute"

      cur.scroll(1)
      cur.scroll(-2)
      cur.scroll(2,"absolute")    #回到序號是2,但指向第三條
  • 更新數據

    cur.execute("update users set username=%s where id=2",("mypython"))
    conn.commit()
  • 指定資料庫

    conn = MySQLdb.connect("localhost","root","123456",port=3306,charset="utf8")    #創建資料庫時不指定那個資料庫
    conn.select_db("test")      #連接創建後再指定
  • 關閉資料庫

    cur.close()     #先關閉游標
    conn.close()    #再關閉資料庫


第十七節 面向對象

類和對象

  • 面向過程和麵向對象的編程
    • 面向過程的編程:函數式編程,C程式等
    • 面向對象的編程:C++,Java,Python等
  • 類和對象:是面向對象中的兩個重要概念
    • 類:是對事物的抽象,比如:汽車模型
    • 對象:是類的一個實例,比如:QQ轎車,大客車
  • 範例說明
    • 汽車模型可以對汽車的特征和行為進行抽象,然後可以實例化一臺真實的汽車實體出來

Python類定義

  • Python類的定義
    • 使用class關鍵字定義一個類,並且類名的首字母要大寫
    • 當程式員需要創建的類型不能用簡單類型表示時就需要創建類
    • 類把需要的變數和函數組合在一起,這種包含也稱之為“封裝”
  • Python類的結構

    class 類名:
        成員變數
        成員函數
    
    class MyClass():
        first = 123
        def fun(self):
            print "I am function"    
  • 對象的創建
    • 創建對象的過程稱之為實例化;當一個對象被創建後,包含三個方面的特性:對象的句柄、屬性和方法。
      • 句柄用於區分不同的對象
      • 對象的屬性和方法與類中的成員變數和成員函數對應

        if __name__ == "__main__":
            myClass = MyClass()     #創建類的一個實例
  • 構造函數__init__

    class Person:
        def __init__(self, name, lang, website):
            self.name = name
            self.lang = lang
            self.website = website
  • self是一個很神奇的參數
    • self指向類的一個實例,當實例調用方法時,self就指向這個調用的方法的實例
  • 子類、父類和繼承

    # 抽象形狀類
    class Shape:
        # 類的屬性
        edge = 0
        # 構造函數
        def __init__(self, edge):
            self.edge = edge
        # 類的方法
        def getEdge(self):
            return self.edge
        # 抽象方法  
        def getArea(self):
            pass
    
    #三角形類,繼承抽象形狀類
    class Triangle(Shape):
        width = 0
        height = 0
        # 構造函數
        def __init__(self, width, height):
            #調用父類構造函數
            Shape.__init__(self, 3)
            self.width = width
            self.height = height
        #重寫方法
        def getArea(self):
            return self.width * self.height / 2
    
    #四邊形類,繼承抽象形狀類       
    class Rectangle(Shape):
        width = 0
        height = 0
        # 構造函數
        def __init__(self, width, height):
            #調用父類構造函數
            Shape.__init__(self, 4)
            self.width = width
            self.height = height
        #重寫方法
        def getArea(self):
            return self.width * self.height
    
    triangle = Triangle(4,5);
    print triangle.getEdge()
    print triangle.getArea()
    
    rectangle = Rectangle(4,5);
    print rectangle.getEdge()
    print rectangle.getArea()
  • python支持多繼承,但不推薦使用


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 微軟利用OAuth2為RESTful API提供了完整的鑒權機制,但是可能微軟保姆做的太完整了,在這個機制中指定了數據持久化的方法是用EF,而且對於用戶、許可權等已經進行了封裝,對於系統中已經有了自己的用戶表,和不是採用EF做持久化的系統來說限制太大,不自由,而且現實中很多情況下,授權伺服器和資源服務 ...
  • 背水一戰 Windows 10 之 控制項(集合類 - ItemsControl): SemanticZoom, ISemanticZoomInformation ...
  • 隨著公司業務的不斷變化,幾年前的 A 項目和底層 DB_A 資料庫華麗轉身為核心業務服務和核心資料庫。 想從 DB_A 資料庫獲取數據的 web 服務越來越多,項目之間的關係逐漸演變為下麵這樣: 很容易看出來按上圖這樣的發展趨勢會存在很多問題(項目關係為個人抽象出來的簡化版,實際情況比這要複雜的多) ...
  • 關於AbstractQueuedSynchronizer JDK1.5之後引入了併發包java.util.concurrent,大大提高了Java程式的併發性能。關於java.util.concurrent包我總結如下: AbstractQueuedSynchronizer是併發類諸如Reentra ...
  • 編碼: 把看的懂,變成看不懂的 String str = "中國"; byte[] bytes = str.getBytes(); System.out.println(Arrays.toString(bytes));解碼: 把看不懂的內容,變成能看懂的 String s = new String( ...
  • ConnectionFactory是用於產生到JMS伺服器的鏈接的,Spring為我們提供了多個ConnectionFactory,有SingleConnectionFactory和CachingConnectionFactory。SingleConnectionFactory對於建立JMS伺服器鏈... ...
  • 此電腦->屬性->高級系統設置->高級->環境變數 變數名:JAVA_HOME 變數值:C:\Program Files\Java\jdk_版本號_變數名:CLASSPATH 變數值:.;%JAVA_HOME%\lib\dt.jar;%JAVA_HOME%\lib\tools.jar;變數名:Pat ...
  • 興緻所致,最近對後臺有些感興趣,就google後臺開發語言。多數網頁內發現的是PHP JS GO 這三種語言,我個人喜歡新事物,所以就選擇了GO。 話不多說,本人直接上Go的官網,下載安裝,Hello Go 一氣呵成。 Go語言的環境算是搭建完成,讓我們一起開始新世界大門。 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...