返回文章列表

Python資料結構與資料函式庫操作技術

本文深入探討 Python 資料結構與資料函式庫操作技術,涵蓋元組、列表、字典等容器型別,以及檔案讀寫、SQLite3 和 MySQL 資料函式庫的應用。文章提供程式碼範例,解析 SQLite3 的基本操作、MySQL 連線設定、資料函式庫查詢、CRUD 操作和 BLOB 資料處理,並輔以流程圖說明,幫助讀者掌握

資料函式庫 Python

Python 的資料結構與資料函式庫操作是開發的根本。本文除了介紹常見的容器型別,如元組、列表和字典,也涵蓋了檔案的讀寫操作,並深入探討了 SQLite3 和 MySQL 資料函式庫的應用。針對 SQLite3,示範瞭如何建立連線、建立表格、插入和查詢資料。對於 MySQL,則涵蓋了連線設定、查詢、CRUD 操作,以及 BLOB 資料的處理,讓讀者能全面理解 Python 與資料函式庫互動的各種導向。

Python 資料結構與資料函式庫操作技術

在 Python 程式設計中,資料結構與資料函式庫操作是兩個至關重要的領域。本文將深入探討 Python 中的容器資料結構,包括元組、列表和字典,並詳細介紹如何使用 Python 進行資料函式庫操作,涵蓋 SQLite3 和 MySQL 等資料函式庫系統。

Python 中的容器資料結構

Python 提供了多種內建的容器資料結構,其中最常用的包括元組(tuple)、列表(list)和字典(dictionary)。這些資料結構各具特色,在不同的應用場景中發揮著重要作用。

元組(Tuple)的特性與應用

元組是一種不可變的序列資料結構,使用圓括號 () 定義。元組的不可變性使其在需要確保資料不被修改的情況下非常有用。

# 定義元組
my_tuple = (1, 2, 3, 4, 5)
print(type(my_tuple))  # 輸出:<class 'tuple'>

# 存取元組元素
print(my_tuple[0])  # 輸出:1

# 元組是不可變的,嘗試修改會引發錯誤
try:
    my_tuple[0] = 10
except TypeError as e:
    print(e)  # 輸出:'tuple' object does not support item assignment

列表(List)的特性與應用

列表是一種可變的序列資料結構,使用方括號 [] 定義。列表的靈活性使其成為 Python 中最常用的資料結構之一。

# 定義列表
my_list = [1, 2, 3, 4, 5]
print(type(my_list))  # 輸出:<class 'list'>

# 修改列表元素
my_list[0] = 10
print(my_list)  # 輸出:[10, 2, 3, 4, 5]

# 追加元素到列表
my_list.append(6)
print(my_list)  # 輸出:[10, 2, 3, 4, 5, 6]

字典(Dictionary)的特性與應用

字典是一種鍵值對(key-value pair)資料結構,使用大括號 {} 定義。字典的快速查詢特性使其在需要根據鍵值存取資料的場景中非常有用。

# 定義字典
my_dict = {'one': 1, 'two': 2, 'three': 3}
print(type(my_dict))  # 輸出:<class 'dict'>

# 存取字典中的值
print(my_dict['one'])  # 輸出:1

# 新增或修改字典中的值
my_dict['four'] = 4
print(my_dict)  # 輸出:{'one': 1, 'two': 2, 'three': 3, 'four': 4}

# 刪除字典中的鍵值對
my_dict.pop('two')
print(my_dict)  # 輸出:{'one': 1, 'three': 3, 'four': 4}

檔案操作:讀取與寫入

Python 提供了豐富的檔案操作介面,支援文字檔案與二進位檔案的讀寫。正確的檔案操作對於資料的存取和處理至關重要。

文字檔案操作

# 開啟檔案進行讀寫
with open('source.txt', 'r') as infile, open('target.txt', 'w') as outfile:
    buffer = infile.read(500000)
    while len(buffer):
        outfile.write(buffer)
        print("檔案複製中,請稍候...", end='')
        buffer = infile.read(500000)
    print("\n複製完成。")

二進位檔案操作

對於二進位檔案(如圖片),需要使用 'rb''wb' 模式進行讀寫。

# 複製圖片檔案
with open('source.jpg', 'rb') as infile, open('target.jpg', 'wb') as outfile:
    buffer = infile.read(5000000)
    while len(buffer):
        outfile.write(buffer)
        print("圖片複製中,請稍候...", end='')
        buffer = infile.read(5000000)
    print("\n複製完成。")

Plantuml 圖表:檔案複製流程

圖表剖析

此圖表展示了檔案複製的流程。首先,程式會檢查待複製檔案的型別,根據檔案是文字檔案還是二進位檔案選擇相應的讀取模式。接著,程式讀取檔案內容並寫入目標檔案。這個過程會持續進行,直到所有檔案內容都被成功複製。最終,程式會結束複製操作。

資料函式庫操作在 Python 中的應用

Python 中的資料函式庫操作是一項基本且重要的技能。對於小型專案,內建的 SQLite3 是一個不錯的選擇,而對於大型專案,MySQL 等資料函式庫系統則更為合適。

SQLite3 的使用

SQLite3 是 Python 標準函式庫的一部分,無需額外安裝即可使用。

import sqlite3

def main():
    # 建立資料函式庫連線
    conn = sqlite3.connect('example.db')
    conn.row_factory = sqlite3.Row

    # 建立表格
    conn.execute('drop table if exists test1')
    conn.execute('create table test1 (t1 text, i1 int)')

    # 插入資料
    data = [
        ('Babu', 1),
        ('Mana', 2),
        ('Bappa', 3),
        ('Babua', 4),
        ('Anju', 5),
        ('Patai', 6),
        ('GasaBuddhu', 7),
        ('Tapas', 8)
    ]
    for item in data:
        conn.execute('insert into test1 (t1, i1) values (?, ?)', item)

    # 查詢資料
    cursor = conn.execute('select * from test1 order by t1')
    for row in cursor:
        print(dict(row))

    # 關閉連線
    conn.close()

if __name__ == "__main__":
    main()

程式碼解析

上述程式碼展示瞭如何使用 SQLite3 進行基本的資料函式庫操作。首先,建立了一個名為 example.db 的資料函式庫檔案,並設定了 row_factory 屬性以便於以字典形式存取查詢結果。接著,建立了一個名為 test1 的表格,並插入了多筆資料。最後,執行了一個查詢操作,將結果列印出來。

MySQL 在大型專案中的應用

對於大型專案,MySQL 等資料函式庫系統更為合適。要在 Python 中使用 MySQL,需要安裝 MySQL Connector。

import mysql.connector
from mysql.connector import Error

def connection_test():
    try:
        # 建立連線
        conn = mysql.connector.connect(
            host='localhost',
            database='python_mysql',
            user='root',
            password='pass'
        )

        if conn.is_connected():
            print("成功連線到資料函式庫")
    except Error as e:
        print(e)
    finally:
        if conn.is_connected():
            conn.close()

if __name__ == "__main__":
    connection_test()

程式碼解析

這段程式碼展示瞭如何使用 MySQL Connector 建立與 MySQL 資料函式庫的連線。首先,匯入了必要的模組,並定義了一個函式 connection_test。在函式中,嘗試建立與資料函式庫的連線,並檢查連線是否成功。如果連線成功,列印出成功訊息;否則,列印出錯誤訊息。最後,關閉連線。

從 MySQL 資料函式庫檢索資料

一旦建立了與 MySQL 資料函式庫的連線,就可以執行查詢來檢索資料。

import mysql.connector
from mysql.connector import Error

def retrieve_values():
    try:
        conn = mysql.connector.connect(
            host='localhost',
            database='python_mysql',
            user='root',
            password='pass'
        )

        if conn.is_connected():
            cursor = conn.cursor()
            cursor.execute('SELECT * FROM authors')
            rows = cursor.fetchall()
            for row in rows:
                print(row)
    except Error as e:
        print(e)
    finally:
        if conn.is_connected():
            conn.close()

if __name__ == "__main__":
    retrieve_values()

程式碼解析

這段程式碼展示瞭如何從 MySQL 資料函式庫中檢索資料。首先,建立了與資料函式庫的連線,並建立了一個遊標物件。接著,執行了一個查詢,並使用 fetchall 方法檢索所有結果。最後,列印出了查詢結果。

使用組態檔案連線資料函式庫

為了提高程式碼的可維護性和安全性,建議使用組態檔案來儲存資料函式庫連線資訊。

[mysql]
host = localhost
database = python_mysql
user = root
password = pass
from configparser import ConfigParser

def read_mysql_config(filename='mysql_config.ini', section='mysql'):
    parser = ConfigParser()
    parser.read(filename)
    db = {}
    if parser.has_section(section):
        items = parser.items(section)
        for item in items:
            db[item[0]] = item[1]
    else:
        raise Exception('{0} not found in the {1} file'.format(section, filename))
    return db

# 使用組態檔案連線資料函式庫
config = read_mysql_config()
conn = mysql.connector.connect(**config)

程式碼解析

這段程式碼展示瞭如何使用組態檔案來連線 MySQL 資料函式庫。首先,定義了一個函式 read_mysql_config,該函式讀取組態檔案並傳回一個包含資料函式庫連線資訊的字典。接著,使用這個字典來建立與資料函式庫的連線。

Plantuml 圖表:資料函式庫操作流程

圖表剖析

此圖表展示了資料函式庫操作的一般流程。首先,選擇要使用的資料函式庫(SQLite3 或 MySQL)。如果是 SQLite3,直接建立連線;如果是 MySQL,需要先安裝 MySQL Connector。建立連線後,執行查詢並檢索資料。最後,關閉連線。

MySQL 資料函式庫連線與操作

在現代軟體開發中,資料函式庫的操作是不可或缺的一部分。本文將深入探討如何使用 Python 連線 MySQL 資料函式庫,並進行常見的 CRUD(建立、讀取、更新、刪除)操作。

連線 MySQL 資料函式庫

首先,需要建立與 MySQL 資料函式庫的連線。這可以透過使用 MySQLConnection 類別來實作。為了提高程式碼的可維護性,將資料函式庫連線設定儲存在一個獨立的設定檔中。

#!/usr/bin/python3
from mysql.connector import MySQLConnection, Error
from MySQL_Connector.mysql_config import ReadingMySQLConfig

def Connect():
    kwargs = ReadingMySQLConfig()
    MyConnection = MySQLConnection(**kwargs)
    try:
        if MyConnection.is_connected():
            print("已連線資料函式庫")
    except Error as e:
        print(e)
    finally:
        MyConnection.close()

if __name__ == "__main__":
    Connect()

程式碼解析

此程式碼定義了一個名為 Connect 的函式,用於建立與 MySQL 資料函式庫的連線。函式首先呼叫 ReadingMySQLConfig() 來讀取資料函式庫連線設定,然後使用這些設定建立連線。如果連線成功,函式會列印出「已連線資料函式庫」。最後,無論連線是否成功,函式都會關閉資料函式庫連線。

內容解密

這段程式碼展示瞭如何使用 Python 連線 MySQL 資料函式庫。首先,透過 ReadingMySQLConfig() 函式讀取資料函式庫連線設定,這些設定通常儲存在一個獨立的組態檔案中。這種做法提高了程式碼的可維護性和安全性。接著,使用 MySQLConnection 類別建立與資料函式庫的連線,並檢查連線是否成功。如果連線成功,列印出成功訊息。最後,無論連線是否成功,都會關閉資料函式庫連線,以釋放資源。

透過這種方式,可以靈活地管理資料函式庫連線設定,並確保資料函式庫操作的安全性和效率。

資料函式庫操作技術:Python 與 MySQL 的整合應用

在現代軟體開發中,資料函式庫操作是一項基本且關鍵的技術。本文將深入探討如何使用 Python 的 MySQL Connector/Python 函式庫來操作 MySQL 資料函式庫,涵蓋從基本連線設定到進階資料處理的全方位技術解析。

資料函式庫連線基礎

建立穩定的資料函式庫連線是所有資料函式庫操作的基礎。以下程式碼展示瞭如何使用 MySQL Connector/Python 建立連線:

#!/usr/bin/python3
from mysql.connector import MySQLConnection, Error
from MySQL_Connector.mysql_config import ReadingMySQLConfig

def connect_to_database():
    try:
        kwargs = ReadingMySQLConfig()
        MyConnection = MySQLConnection(**kwargs)
        if MyConnection.is_connected():
            print('成功連線資料函式庫')
        return MyConnection
    except Error as e:
        print(f'連線失敗:{e}')
        return None

if __name__ == "__main__":
    connection = connect_to_database()
    if connection:
        connection.close()

程式碼解析

此程式碼定義了一個名為 connect_to_database 的函式,用於建立與 MySQL 資料函式庫的連線。函式使用 MySQLConnection 類別並傳入組態引數。連線成功後,會印出「成功連線資料函式庫」的訊息。

執行 SQL 查詢

連線資料函式庫後,我們可以執行 SQL 查詢來檢索資料。MySQL Connector/Python 提供了 fetchmany()fetchall() 方法來取得查詢結果。

#!/usr/bin/python3
from mysql.connector import MySQLConnection, Error
from MySQL_Connector.mysql_config import ReadingMySQLConfig

def query_with_fetchmany():
    try:
        kwargs = ReadingMySQLConfig()
        MyConnection = MySQLConnection(**kwargs)
        cursor = MyConnection.cursor()
        cursor.execute("SELECT * FROM EMPLOYEE")
        rows = cursor.fetchmany(10)  # 取得前10筆資料
        for row in rows:
            print(row)
    except Error as e:
        print(e)
    finally:
        cursor.close()
        MyConnection.close()

if __name__ == "__main__":
    query_with_fetchmany()

程式碼解析

此程式碼展示瞭如何使用 fetchmany() 方法來取得查詢結果的前10筆資料。函式首先建立資料函式庫連線,然後執行 SQL 查詢。查詢結果透過 fetchmany(10) 取得,並逐一列印。

資料操作技術

插入資料

在資料函式庫中插入新資料是常見的操作。以下程式碼展示瞭如何使用 MySQL Connector/Python 插入資料:

#!/usr/bin/python3
from mysql.connector import MySQLConnection, Error
from MySQL_Connector.mysql_config import ReadingMySQLConfig

def InsertBooks(books):
    query = "INSERT INTO books(title, isbn) VALUES(%s, %s)"
    try:
        kwargs = ReadingMySQLConfig()
        MyConnection = MySQLConnection(**kwargs)
        cursor = MyConnection.cursor()
        cursor.executemany(query, books)
        MyConnection.commit()  # 提交變更
    except Error as e:
        print(e)
    finally:
        cursor.close()
        MyConnection.close()

def main():
    books = [("TestBook", 1236547890)]
    InsertBooks(books)
    print("已插入一筆資料")

if __name__ == "__main__":
    main()

程式碼解析

此程式碼定義了一個名為 InsertBooks 的函式,用於向 books 表中插入新資料。函式使用 executemany() 方法來執行批次插入操作。資料插入後,透過 commit() 方法提交變更。

更新資料

更新資料函式庫中的現有資料也是常見的操作。以下程式碼展示瞭如何使用 MySQL Connector/Python 更新資料:

#!/usr/bin/python3
from mysql.connector import MySQLConnection, Error
from MySQL_Connector.mysql_config import ReadingMySQLConfig

def UpdateBooks(book_id, title):
    kwargs = ReadingMySQLConfig()
    data = (title, book_id)
    query = "UPDATE books SET title = %s WHERE id = %s"
    try:
        MyConnection = MySQLConnection(**kwargs)
        cursor = MyConnection.cursor()
        cursor.execute(query, data)
        MyConnection.commit()  # 提交變更
    except Error as e:
        print(e)
    finally:
        cursor.close()
        MyConnection.close()

def main():
    book_id = 3
    title = "新書名"
    UpdateBooks(book_id, title)
    print("已更新資料")

if __name__ == "__main__":
    main()

程式碼解析

此程式碼定義了一個名為 UpdateBooks 的函式,用於更新 books 表中的資料。函式使用 execute() 方法來執行更新操作,並透過 commit() 方法提交變更。

刪除資料

刪除資料函式庫中的資料同樣重要。以下程式碼展示瞭如何使用 MySQL Connector/Python 刪除資料:

#!/usr/bin/python3
from mysql.connector import MySQLConnection, Error
from MySQL_Connector.mysql_config import ReadingMySQLConfig

def DeleteBooks(book_id):
    kwargs = ReadingMySQLConfig()
    query = "DELETE FROM books WHERE id = %s"
    try:
        MyConnection = MySQLConnection(**kwargs)
        cursor = MyConnection.cursor()
        cursor.execute(query, (book_id,))
        MyConnection.commit()  # 提交變更
    except Error as e:
        print(e)
    finally:
        cursor.close()
        MyConnection.close()

def main():
    book_id = 3
    DeleteBooks(book_id)
    print("已刪除資料")

if __name__ == "__main__":
    main()

程式碼解析

此程式碼定義了一個名為 DeleteBooks 的函式,用於從 books 表中刪除資料。函式使用 execute() 方法來執行刪除操作,並透過 commit() 方法提交變更。注意在 execute() 方法中,引數 (book_id,) 後面有一個逗號,這是因為 MySQL Connector/Python 需要一個 tuple 作為引數,即使只有一個值。

進階資料處理:BLOB 資料操作

MySQL 支援儲存 BLOB(Binary Large OBject)資料型別,可以用來儲存圖片、影片等二進位資料。以下程式碼展示瞭如何更新資料函式庫中的 BLOB 資料:

#!/usr/bin/python3
from mysql.connector import MySQLConnection, Error
from MySQL_Connector.mysql_config import ReadingMySQLConfig

def ReadFile(filename):
    with open(filename, 'rb') as f:
        images = f.read()
    return images

def UpdateImage(author_id, filename):
    kwargs = ReadingMySQLConfig()
    data = ReadFile(filename)
    query = "UPDATE authors SET photo = %s WHERE id = %s"
    args = (data, author_id)
    try:
        MyConnection = MySQLConnection(**kwargs)
        cursor = MyConnection.cursor()
        cursor.execute(query, args)
        MyConnection.commit()  # 提交變更
    except Error as e:
        print(e)
    finally:
        cursor.close()
        MyConnection.close()

def main():
    author_id = 1
    filename = 'path/to/image.jpg'
    UpdateImage(author_id, filename)
    print("已更新圖片")

if __name__ == "__main__":
    main()

程式碼解析

此程式碼定義了一個名為 UpdateImage 的函式,用於更新 authors 表中的 photo 欄位。函式首先讀取圖片檔案的二進位資料,然後使用 execute() 方法執行更新操作。更新後,透過 commit() 方法提交變更。

資料函式庫操作流程圖

@startuml
skinparam backgroundColor #FEFEFE
skinparam componentStyle rectangle

title Python資料結構與資料函式庫操作技術

package "Docker 架構" {
    actor "開發者" as dev

    package "Docker Engine" {
        component [Docker Daemon] as daemon
        component [Docker CLI] as cli
        component [REST API] as api
    }

    package "容器運行時" {
        component [containerd] as containerd
        component [runc] as runc
    }

    package "儲存" {
        database [Images] as images
        database [Volumes] as volumes
        database [Networks] as networks
    }

    cloud "Registry" as registry
}

dev --> cli : 命令操作
cli --> api : API 呼叫
api --> daemon : 處理請求
daemon --> containerd : 容器管理
containerd --> runc : 執行容器
daemon --> images : 映像檔管理
daemon --> registry : 拉取/推送
daemon --> volumes : 資料持久化
daemon --> networks : 網路配置

@enduml

圖表解析

此圖表展示了使用 Python 操作 MySQL 資料函式庫的基本流程。流程始於建立資料函式庫連線,然後根據不同的操作需求,執行 SQL 查詢、插入、更新或刪除資料。最後,流程結束於完成所有資料函式庫操作並關閉連線。

透過本文的介紹,您應該能夠熟練地在 Python 中使用 MySQL Connector/Python 函式庫來操作 MySQL 資料函式庫。這些技能對於開發涉及資料函式庫的應用程式至關重要。

從技術架構視角來看,Python 提供了豐富的資料結構和資料函式庫操作工具,讓開發者能有效率地處理資料。本文深入探討了 Python 內建的容器型別(元組、列表、字典)的特性與應用,並詳細說明如何利用 Python 操作 SQLite3 和 MySQL 資料函式庫,涵蓋連線管理、資料增刪改查,甚至包含 BLOB 資料的處理。文章清晰地展現瞭如何結合 Python 的資料結構和資料函式庫操作能力,構建資料驅動的應用程式。然而,在實際應用中,開發者仍需注意資料函式庫效能最佳化、SQL 注入等安全議題,以及不同資料函式庫系統的特性差異。對於大型專案,建議採用更健全的 ORM 框架來簡化資料函式庫操作的複雜性,並提升程式碼的可維護性。隨著 NoSQL 資料函式庫的興起,Python 生態系統也將持續發展,提供更便捷的介面與工具,以滿足多元化的資料處理需求。玄貓認為,掌握 Python 的資料函式庫操作技術,對於提升開發效率和建構穩健的應用程式至關重要。