Python數(shù)據(jù)庫連接操作 Python數(shù)據(jù)庫交互常用模塊解析

python操作數(shù)據(jù)庫常用模塊包括sqlite3、pymysqlmysqlclient、psycopg2及sqlalchemy。1. sqlite3適用于本地開發(fā)或小型項(xiàng)目,使用流程為連接數(shù)據(jù)庫→創(chuàng)建游標(biāo)→執(zhí)行sql→提交事務(wù)→關(guān)閉連接;2. pymysql和mysqlclient用于mysql操作,區(qū)別在于pymysql是純python實(shí)現(xiàn)而mysqlclient是c擴(kuò)展,參數(shù)占位符前者用%s后者可用%s或?;3. psycopg2支持postgresql,提供事務(wù)控制、異步查詢等高級特性,并可通過dictcursor返回字典結(jié)果;4. sqlalchemy作為orm工具可映射數(shù)據(jù)庫表為類,簡化數(shù)據(jù)庫交互,支持多種數(shù)據(jù)庫后端并提升代碼可讀性

Python數(shù)據(jù)庫連接操作 Python數(shù)據(jù)庫交互常用模塊解析

Python 要跟數(shù)據(jù)庫打交道,離不開幾個(gè)常用模塊。不管是做數(shù)據(jù)分析、Web 后端,還是自動化腳本,掌握這些模塊能讓你事半功倍。

1. sqlite3:輕量級數(shù)據(jù)庫操作首選

SQLite 是一個(gè)嵌入式數(shù)據(jù)庫,不需要獨(dú)立的服務(wù)進(jìn)程,特別適合本地開發(fā)或小型項(xiàng)目。Python 自帶 sqlite3 模塊,開箱即用。

使用流程一般是這樣:

立即學(xué)習(xí)Python免費(fèi)學(xué)習(xí)筆記(深入)”;

  • 連接數(shù)據(jù)庫(如果文件不存在會自動創(chuàng)建)
  • 創(chuàng)建游標(biāo)對象
  • 執(zhí)行 SQL 語句
  • 提交事務(wù)(執(zhí)行增刪改時(shí))
  • 關(guān)閉連接

舉個(gè)例子,假設(shè)你要插入一條用戶數(shù)據(jù):

import sqlite3  conn = sqlite3.connect('example.db') cursor = conn.cursor()  cursor.execute("CREATE TABLE IF NOT EXISTS users (id INTEGER PRIMARY KEY, name TEXT)") cursor.execute("INSERT INTO users (name) VALUES (?)", ("Alice",)) conn.commit()

記得每次執(zhí)行完寫操作都要 commit(),否則不會保存。讀取的話可以直接 execute().fetchall()。

2. pymysql 和 mysqlclient:操作 MySQL 的兩種方式

如果你用的是 MySQL 數(shù)據(jù)庫,常用的 Python 模塊有兩個(gè):pymysql 和 mysqlclient。前者是純 Python 實(shí)現(xiàn),安裝方便;后者是 C 擴(kuò)展,性能更好一些。

兩者的使用方式差不多,都是先建立連接,再執(zhí)行 SQL。比如用 pymysql 插入數(shù)據(jù):

import pymysql  conn = pymysql.connect(host='localhost', user='root', password='password', database='testdb') cursor = conn.cursor()  cursor.execute("INSERT INTO users (name) VALUES (%s)", ("Bob",)) conn.commit()

區(qū)別主要在參數(shù)占位符上:pymysql 用 %s,而 mysqlclient 可以用 %s 或 ?,看你的習(xí)慣。

另外,這兩個(gè)模塊默認(rèn)不是“自動提交”的,所以寫操作之后別忘了調(diào)用 commit()。

3. psycopg2:連接 PostgreSQL 的利器

PostgreSQL 在中大型項(xiàng)目中很常見,Python 下最主流的連接模塊就是 psycopg2。它支持很多高級特性,比如事務(wù)控制、異步查詢等。

基本使用方式和前面類似,但要注意幾點(diǎn):

  • 參數(shù)占位符用 %s
  • 查詢結(jié)果默認(rèn)返回元組,可以用 cursor_factory=psycopg2.extras.DictCursor 讓結(jié)果變成字典形式

示例代碼如下:

import psycopg2 from psycopg2 import extras  conn = psycopg2.connect("dbname=testdb user=postgres password=secret") cursor = conn.cursor(cursor_factory=extras.DictCursor)  cursor.execute("SELECT * FROM users WHERE id = %s", (1,)) row = cursor.fetchone() print(row['name'])  # 輸出用戶名

這個(gè)模塊對類型轉(zhuǎn)換也做得比較好,比如日期、json 類型都能自動處理。

4. ORM 工具:SQLAlchemy 簡化數(shù)據(jù)庫交互

如果你不想手寫太多 SQL,可以考慮用 ORM(對象關(guān)系映射)工具,其中最流行的就是 SQLAlchemy。

它的優(yōu)勢在于:

  • 把數(shù)據(jù)庫表映射成類,操作對象就像操作數(shù)據(jù)一樣
  • 支持多種數(shù)據(jù)庫后端(MySQL、PostgreSQL、SQLite 等)
  • 查詢語句更直觀,可讀性強(qiáng)

簡單看一下怎么定義模型并插入數(shù)據(jù):

from sqlalchemy import create_engine, Column, Integer, String from sqlalchemy.ext.declarative import declarative_base from sqlalchemy.orm import sessionmaker  Base = declarative_base()  class User(Base):     __tablename__ = 'users'     id = Column(Integer, primary_key=True)     name = Column(String)  engine = create_engine('sqlite:///example.db') Base.metadata.create_all(engine) Session = sessionmaker(bind=engine) session = Session()  new_user = User(name="Charlie") session.add(new_user) session.commit()

雖然一開始學(xué)習(xí)成本高一點(diǎn),但一旦上手,維護(hù)起來比原始 SQL 方便很多。


基本上就這些。不同場景下選合適的模塊很重要:小項(xiàng)目用 sqlite3,MySQL 用 pymysql 或 mysqlclient,PostgreSQL 推薦 psycopg2,復(fù)雜業(yè)務(wù)建議上 SQLAlchemy。

? 版權(quán)聲明
THE END
喜歡就支持一下吧
點(diǎn)贊6 分享