在學習和開發Python的時候,第一步的工作就是先準備好開發環境,包括相關常用的插件,以及一些輔助工具,這樣我們在後續的開發工作中,才能做到事半功倍。下麵介紹一些Python 開發環境的準備以及一些常用類庫模塊的安裝和使用的經驗總結,供大家參考瞭解。 ...
在學習和開發Python的時候,第一步的工作就是先準備好開發環境,包括相關常用的插件,以及一些輔助工具,這樣我們在後續的開發工作中,才能做到事半功倍。下麵介紹一些Python 開發環境的準備以及一些常用類庫模塊的安裝和使用的經驗總結,供大家參考瞭解。
1、開發VScode的安裝及相關準備
在 Python 開發環境的準備中,有幾個步驟是關鍵的。以下是一個詳細的指南,涵蓋了開發環境的準備以及一些常用插件的安裝:
1)安裝 VS Code
VS Code: 這是一個輕量級但功能強大的代碼編輯器,支持豐富的擴展。你可以從 Visual Studio Code 官方網站 下載。打開官網 https://code.visualstudio.com/,下載軟體包。或者你也可以使用其他的如 PyCharm,可以從 JetBrains 官方網站 下載。
Python AI 編程助手:Fitten Code:
它是由非十大模型驅動的 AI 編程助手,它可以自動生成代碼,提升開發效率,幫您調試 Bug,節省您的時間,另外還可以對話聊天,解決您編程碰到的問題。
Fitten Code是由非十大模型驅動的AI編程助手,它可以自動生成代碼,提升開發效率,幫您調試Bug,節省您的時間。還可以對話聊天,解決您編程碰到的問題。免費且支持80多種語言:Python、C++、Javascript、Typescript、Java等。
強烈推薦使用,自動補齊代碼功能,可以節省很多手工鍵入代碼的時間,減少錯誤。
2)安裝 VS Code Python 擴展
在VSCode中安裝 Python 擴展,在擴展市場搜索 Python 並安裝。
3)安裝 Python
首先,確保你已經安裝了 Python。你可以從 Python 官方網站 下載最新版本安裝包並安裝。
Window 平臺安裝 Python: https://www.python.org/downloads/windows/
Mac 平臺安裝 Python: https://www.python.org/downloads/mac-osx/
4)配置 Python 環境變數
打開系統環境變數,在 PATH 變數中添加 Python 目錄,這樣可以在命令行中直接使用 Python。
5)測試 Python 環境
在命令行中輸入 python,如果出現 Python 解釋器版本信息,則表示 Python 環境配置成功。
6)安裝 pip
打開命令行,輸入 pip install --upgrade pip,升級 pip 到最新版本。
7)安裝 virtualenv
打開命令行,輸入 pip install virtualenv,安裝 virtualenv。
2、Python一些常用類庫模塊的安裝
Python開發常用類庫模塊非常多,看你側重於那個方面,基本上都時列出來一大串,我以常規後端Web API開發為側重點進行一些重點的推介,供參考學習。
1) requests
requests
是一個簡單易用的 Python 庫,地址:https://github.com/psf/requests,用於發送 HTTP 請求。它的設計目標是使得與 Web 服務的交互更加方便和人性化。requests
是基於 urllib3 之上的一個封裝層,提供了簡潔的 API 來處理常見的 HTTP 請求操作,如 GET、POST、PUT、DELETE 等。
requests
的主要特性
- 簡潔的 API:相比原生的
urllib
,requests
提供了更直觀、更容易理解的介面。 - 自動處理編碼:
requests
自動處理響應的內容編碼,並自動解碼gzip
和deflate
壓縮。 - 支持保持會話:通過
Session
對象,requests
可以在多個請求之間保持會話,處理 cookies。 - 簡化的錯誤處理:
requests
會根據 HTTP 響應狀態碼拋出相應的異常,從而簡化錯誤處理流程。 - 豐富的功能:支持 HTTP 認證、代理、SSL 證書驗證、文件上傳、多部分編碼表單、會話對象、cookie 持久化、連接池管理等功能。
如果需要考慮非同步處理,可以使用 aiohttp :aiohttp
是一個非同步 HTTP 客戶端和伺服器框架,它使用 Python 的 asyncio
庫來處理大量併發的請求。aiohttp
適合那些需要高性能網路通信的應用,如 Web 服務、WebSocket 和實時數據處理。
2) Uvicorn
Uvicorn
是一個基於 ASGI(Asynchronous Server Gateway Interface)的高性能、輕量級的 Python Web 伺服器,專為運行非同步 Web 框架(如 FastAPI、Starlette)而設計。它利用了 Python 的非同步功能,能夠處理大量併發連接,適合構建現代的非同步 Web 應用程式。
Uvicorn
的主要特性
- 高性能: 使用
uvloop
和httptools
提供極高的性能,適合在高併發場景下使用。 - 非同步支持: 支持非同步編程模型,能夠與 Python 的
asyncio
和trio
無縫集成。 - ASGI 相容: 完全相容 ASGI 標準,適用於現代非同步 Web 框架,如 FastAPI 和 Starlette。
- WebSocket 支持: 通過 ASGI,
Uvicorn
原生支持 WebSocket 協議。 - 靈活的部署: 既可以作為獨立的開發伺服器使用,也可以與
Gunicorn
等 WSGI 伺服器結合部署生產環境。
運行 Uvicorn uvicorn testuvicorn:app --reload
Uvicorn
通常用於運行 FastAPI 或 Starlette 應用。以下是一個簡單的 FastAPI 應用並使用 Uvicorn
運行:
from fastapi import FastAPI app = FastAPI() @app.get("/") async def read_root(): return {"Hello": "World"} if __name__ == "__main__": import uvicorn uvicorn.run(app, host="0.0.0.0", port=8000)Uvicorn 提供了豐富的配置選項,以滿足不同需求。可以通過命令行參數或配置文件來配置 Uvicorn 的行為。 以下是一些常用的配置選項: --host:指定主機地址,預設為 127.0.0.1。 --port:指定埠號,預設為 8000。 --workers:指定工作進程數量,預設為 CPU 核心數的 1 倍。 --log-level:指定日誌級別,預設為 info。 --reload:在代碼修改時自動重新載入應用程式。
3)FastAPI
FastAPI
是一個現代、快速(高性能)的 Web 框架,用於構建 API。它基於 Python 3.7+ 的類型提示,並且依賴於 Starlette
(用於 web 伺服器和路由)和 Pydantic
(用於數據驗證和序列化)。FastAPI
的設計目標是提供與 Flask 和 Django 類似的開發體驗,但在性能、類型安全和開發者友好性方面做出更大的提升。GitHub地址:https://github.com/fastapi/fastapi
FastAPI 的主要特性
- 極高的性能: 基於 ASGI 的非同步支持,使得
FastAPI
在性能上接近 Node.js 和 Go 的水平,適合處理高併發。 - 自動生成 API 文檔: 使用 OpenAPI 和 JSON Schema 自動生成互動式的 API 文檔(如 Swagger UI 和 ReDoc)。
- 基於類型提示的自動驗證: 利用 Python 的類型提示和
Pydantic
,自動進行數據驗證和解析。 - 非同步支持: 原生支持
async
和await
,能夠處理非同步任務,適合與資料庫、第三方 API、WebSocket 等交互。 - 內置依賴註入系統: 使得依賴的聲明和管理變得簡潔而強大,便於模塊化設計。
- 開發者友好: 提供了詳細的錯誤信息和文檔,支持自動補全,極大提升了開發效率。
以下是一個簡單的 FastAPI
應用:
from fastapi import FastAPI app = FastAPI() @app.get("/") async def read_root(): return {"message": "Hello, World"} @app.get("/items/{item_id}") async def read_item(item_id: int, q: str = None): return {"item_id": item_id, "q": q}
當你運行 FastAPI 應用時,它會自動生成互動式文檔:
- Swagger UI: 訪問
http://127.0.0.1:8000/docs
- ReDoc: 訪問
http://127.0.0.1:8000/redoc
這兩個文檔界面可以讓你查看 API 的結構,甚至可以直接在界面中進行 API 調用。如我在上篇隨筆進行介紹的《Python中FastAPI項目使用 Annotated的參數設計》。
FastAPI 是一個非常現代化和高效的框架,非常適合用於構建高性能的 API。其自動文檔生成、數據驗證和依賴註入等特性,使得開發者能夠更快、更安全地編寫代碼,並提供出色的用戶體驗。
FastAPI項目的參數設計,這些您可以在路徑操作函數參數或使用Annotated
的依賴函數中使用的特殊函數,用於從請求中獲取數據。
我們引入配置文件,可以對FastAPI 中服務啟動的參數進行統一的管理,如下main.py 代碼所示。
if __name__ == "__main__": import uvicorn # log_level:'critical', 'error', 'warning', 'info', 'debug', 'trace'。預設值:'info'。 uvicorn.run( app, host=settings.SERVER_IP, port=settings.SERVER_PORT, log_config="app/uvicorn_config.json", # 日誌配置 # log_level="info", # 日誌級別 )
3)pymysql 、pymssql、和 SQLAlchemy
涉及後端的處理,肯定繞不過資料庫的處理操作,如對於MySQL、MS SqlServer等資料庫的處理和封裝。
PyMySQL
是一個純 Python 實現的 MySQL 客戶端庫,用於連接 MySQL 資料庫並執行 SQL 查詢。它是 Python 的 MySQLdb
庫的替代品,尤其適合那些在使用 Python 3 並且不希望依賴 C 語言擴展的項目。PyMySQL
支持 MySQL 資料庫的所有主要功能,包括事務、存儲過程、連接池等。
PyMySQL
的主要特性
- 純 Python 實現: 不依賴 C 擴展,易於安裝和跨平臺使用。
- 相容性好: 與
MySQLdb
的介面非常相似,便於從MySQLdb
遷移到PyMySQL
。 - 支持 MySQL 的所有主要功能: 包括事務處理、存儲過程、BLOB 數據類型等。
- 簡單易用: 提供了直觀的 API 進行資料庫連接、查詢、插入、更新和刪除操作。
安裝 PyMySQL
你可以通過 pip
來安裝 PyMySQL
:
pip install pymysql
使用 PyMySQL
連接到 MySQL 資料庫:
import pymysql connection = pymysql.connect( host='localhost', user='your_username', password='your_password', database='your_database' ) try: with connection.cursor() as cursor: # 執行 SQL 查詢 cursor.execute("SELECT VERSION()") # 獲取查詢結果 result = cursor.fetchone() print(f"MySQL version: {result}") finally: connection.close()
如下是我實際表的一些操作例子代碼。
sql = "select * from t_customer where name = '{0}' LIMIT 1 ".format(name) print(sql) cursor.execute(sql) myresult = cursor.fetchone() # fetchone() 獲取一條記錄 if myresult: print("該名稱已存在,請更換名稱.") else: print("該名稱可用.") # 插入記錄語句 sql = "INSERT INTO `t_customer` (`ID`, `Name`, `Age`, `Creator`, `CreateTime`) VALUES (%s, %s, %s, %s, %s);" val = (id, name, age, creator, createtime) cursor.execute(sql, val) db.commit() # 數據表內容有更新,必須使用到該語句 print(cursor.rowcount, " 行記錄插入.") sql = "update t_customer Set age = %s where name =%s " val = (26, name) cursor.execute(sql, val) db.commit() # 數據表內容有更新,必須使用到該語句 print(cursor.rowcount, " 條記錄被修改") sql = "select * from t_customer where name = '{0}' LIMIT 1 ".format(name) cursor.execute(sql) myresult = cursor.fetchone() # fetchone() 獲取一條記錄 if myresult: print("修改後的記錄: ", myresult) sql = "SELECT * FROM t_customer" cursor.execute(sql) print("t_customer 結果集: ") for x in cursor: print(x) sql = "delete from t_customer where name =%s " try: cursor.execute(sql, (name,)) db.commit() # 數據表內容有更新,必須使用到該語句 print(cursor.rowcount, " 行記錄刪除.") except: db.rollback() # 發生錯誤時回滾 print("刪除記錄失敗!") sql = "SELECT * FROM t_customer" cursor.execute(sql) myresult = cursor.fetchall() # fetchall() 獲取所有記錄 for x in myresult: print(x) # 關閉資料庫連接 db.close()
輸出的顯示如下所示。
pymssql
是一個用於連接 Microsoft SQL Server 資料庫的 Python 庫,它是基於 FreeTDS
實現的輕量級資料庫介面,旨在簡化 Python 與 SQL Server 之間的交互。pymssql
提供了對 T-SQL 語句的支持,並且可以執行存儲過程和處理大批量數據插入等任務。
pymssql
的主要特性
- 輕量級和易用性: 提供了簡單的 API 介面,易於快速上手。
- 與 SQL Server 相容: 支持 Microsoft SQL Server 2005 及以上版本。
- 跨平臺支持: 支持在 Windows、Linux 和 macOS 系統上運行。
- 集成事務管理: 通過
commit
和rollback
方法進行事務管理。 - 支持存儲過程: 能夠執行和處理存儲過程,適用於複雜的資料庫操作。
- 批量插入支持: 通過
executemany
方法高效地插入大量數據。
安裝 pymssql
你可以通過 pip
安裝 pymssql
:
pip install pymssql
使用 pymssql
連接到 SQL Server 資料庫,pymssql
支持事務,可以在執行多個操作時使用事務控制,以確保數據一致性:
import pymssql # Connect to the database conn = pymssql.connect( server="localhost", user="sa", password="123456", database="Winframework", tds_version="7.0", ) # Create a cursor object cursor = conn.cursor() # Execute a query cursor.execute("SELECT * FROM T_Customer") # Fetch all the rows rows = cursor.fetchall() # Print the rows for row in rows: print(row) # Close the cursor and connection cursor.close() conn.close()
SQLAlchemy 是一個功能強大且靈活的 Python SQL 工具包和對象關係映射(ORM)庫。它被廣泛用於在 Python 項目中處理關係型資料庫的場景,既提供了高級的 ORM 功能,又保留了對底層 SQL 語句的強大控制力。
SQLAlchemy
允許開發者通過 Python 代碼與資料庫進行交互,而無需直接編寫 SQL 語句,同時也支持直接使用原生 SQL 進行複雜查詢。
Engine 連接 驅動引擎
Session 連接池,事務 由此開始查詢
Model 表 類定義
Column 列
Query 若幹行 可以鏈式添加多個條件
SQLAlchemy 的主要特性
- 對象關係映射(ORM): 允許將 Python 類映射到資料庫表,並且自動處理 SQL 的生成和執行。
- SQL 表達式語言: 提供了一個表達式語言層,允許構建和執行原生 SQL 查詢,同時保留類型安全性和跨資料庫相容性。
- 資料庫抽象層: 提供了跨資料庫的相容性,使得在不同資料庫之間切換變得相對容易。
- 高性能: 通過細粒度的控制和緩存機制,優化了資料庫訪問的性能。
- 事務管理: 支持複雜的事務處理和上下文管理,使得資料庫操作更加安全和一致。
- 支持多種資料庫: 支持大多數主流的關係型資料庫,如 SQLite、PostgreSQL、MySQL、Oracle、SQL Server 等。
安裝 SQLAlchemy
你可以通過 pip
安裝 SQLAlchemy
:
pip install sqlalchemy
如果你要連接到特定的資料庫,還需要安裝相應的資料庫驅動程式。例如,要連接到 MySQL 資料庫,你還需要安裝 pymysql
或 mysqlclient
:
使用 SQLAlchemy 操作資料庫,
可以統一多種資料庫的操作處理,如SQLITE、SqlServer、MySQL、PostgreSQL等。
使用 SQLAlchemy
創建與資料庫的連接:
# mysql 資料庫引擎 engine = create_engine( "mysql+pymysql://root:[email protected]:3306/WinFramework", pool_recycle=3600, # echo=True, ) # Sqlite 資料庫引擎 # engine = create_engine("sqlite:///testdir//test.db") # PostgreSQL 資料庫引擎 # engine = create_engine( # "postgresql+psycopg2://postgres:123456@localhost:5432/winframework", # # echo=True, # ) # engine = create_engine( # "mssql+pymssql://sa:123456@localhost/WinFramework?tds_version=7.0", # # echo=True, # )
由於對應的是ORM處理方式,因此和資料庫表關聯需要定義一個類對象,如下所示。
from sqlalchemy import create_engine, Column, Integer, String, DateTime, TIMESTAMP from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import sessionmaker # 創建一個基類,用於定義資料庫表的結構 Base = declarative_base() # 定義一個 Customer資料庫表的模型 class Customer(Base): __tablename__ = "t_customer" id = Column(String, primary_key=True, comment="主鍵") name = Column(String, comment="姓名") age = Column(Integer, comment="年齡") creator = Column(String, comment="創建人") createtime = Column(DateTime, comment="創建時間")
CRUD的操作例子代碼如下所示。
# 創建一個會話 Session = sessionmaker(bind=engine) session = Session() id = str(guid.uuid4()) # create a new customer customer = Customer( id=id, name="Alice", age=25, creator="admin", createtime=datetime.strptime("2021-01-01 12:00:00", "%Y-%m-%d %H:%M:%S"), ) # add the customer to the session session.add(customer) # commit the changes to the database session.commit() # query the customer from the session for item in session.scalars(select(Customer)): print(item.id, item.name, item.age, item.creator, item.createtime) print("\r\nquery all customers") customers = session.query(Customer).all() for customer in customers: print(customer.name, customer.age) print("\r\nquery all customers by condition:age > 20") customers = session.query(Customer).filter(Customer.age > 20).limit(30).offset(1).all() for customer in customers: print(customer.name, customer.age) print("\r\nquery customer by id") customer = session.query(Customer).filter(Customer.id == id).first() if customer: print(customer.name, customer.age) print("\r\n 複雜查詢") customers = ( session.query(Customer) .filter( or_( and_(Customer.age > 20, Customer.age < 30), Customer.name.in_(["Alice", "伍華聰"]), ) ) .all() ) for customer in customers: print(customer.name, customer.age) print("\r\nselect customer by id") stmt = select(Customer).where(Customer.id == id) result = session.execute(stmt) print(result) stmt = select(Customer).where(Customer.name == "伍華聰") result = session.execute(stmt).scalar() if result: print("Customer exists in the database") print(result.id, result.name, result.age) else: print("Customer does not exist in the database") print("\r\nselect customer In") # query the customer from the session stmt = select(Customer).where(Customer.name.in_(["Alice", "伍華聰"])) for item in session.scalars(stmt): print(item.id, item.name, item.age, item.creator, item.createtime) print('\r\ndelete all customers by name = "Alice"') # delete the customer from the database delete_stmt = delete(Customer).where(Customer.name == "Alice") result = session.execute(delete_stmt) print(str(result.rowcount) + " rows deleted") session.commit() # close the session session.close()
由於篇幅限制,我們暫時介紹一些,其實就算是做後端WebAPI的處理,我們也需要瞭解很多不同的類庫,Python類庫非常豐富,而且同步、非同步又有不同的類庫差異,因此我們可以根據實際需要選用不同的類庫來實現我們的框架目的。
如對於FastAPI的數據驗證,我們一般引入 pydantic,可以對數據進行各種豐富的校驗處理,類似於強類型和各種規則的校驗。
class Person(BaseModel): name: str age: int @field_validator("age") def age_must_be_positive(cls, v): if v < 0: raise ValueError("Age must be a positive number") return v
如對於配置信息的處理,我們還可以引入 python-dotenv 和 pydantic_settings 來統一管理配置參數。
from pydantic_settings import BaseSettings, SettingsConfigDict class Settings(BaseSettings): model_config = SettingsConfigDict( env_file=".env", # 載入env文件 extra="ignore", # 載入env文件,如果沒有在Settings中定義屬性,也不拋出異常 env_file_encoding="utf-8", env_prefix="", case_sensitive=False, ) # Env Server SERVER_IP: str = "127.0.0.1" SERVER_PORT: int = 9000 # Env Database DB_NAME: str = "winframework" DB_USER: str = "root" DB_PASSWORD: str = "123456" DB_HOST: str = "localhost" DB_PORT: int = 3306 DB_URI: str = ( f"mysql+pymysql://{DB_USER}:{DB_PASSWORD}@{DB_HOST}:{DB_PORT}/{DB_NAME}" )settings = Settings()
.............
還有對於一些常規的文件格式,如json格式,txt格式的文件處理,以及PDF文件、Excel文件、圖片操作、聲音處理、二維碼處理等,都有不同的類庫提供輔助處理,我們可以從中擇優選擇即可。
Python的世界豐富多彩,讓我們一起探索並應用在實踐當中。
專註於代碼生成工具、.Net/.NetCore 框架架構及軟體開發,以及各種Vue.js的前端技術應用。著有Winform開發框架/混合式開發框架、微信開發框架、Bootstrap開發框架、ABP開發框架、SqlSugar開發框架等框架產品。
轉載請註明出處:撰寫人:伍華聰 http://www.iqidi.com