# Python怎么進行數據庫的SQL操作
## 1. 前言
在現代軟件開發中,數據庫操作是不可或缺的一部分。Python作為一門功能強大且易學的編程語言,提供了多種方式與數據庫進行交互。本文將詳細介紹如何使用Python執行SQL操作,包括連接數據庫、執行查詢、插入數據、更新數據以及刪除數據等常見操作。
## 2. Python數據庫連接
### 2.1 選擇合適的數據庫驅動
Python支持多種數據庫,每種數據庫通常都有對應的驅動庫:
- **MySQL**: `mysql-connector-python` 或 `pymysql`
- **PostgreSQL**: `psycopg2`
- **SQLite**: 內置 `sqlite3` 模塊
- **Oracle**: `cx_Oracle`
- **SQL Server**: `pyodbc`
安裝驅動通常使用pip:
```bash
pip install pymysql psycopg2 sqlite3 cx_Oracle pyodbc
以MySQL為例,使用pymysql
建立連接:
import pymysql
connection = pymysql.connect(
host='localhost',
user='username',
password='password',
database='dbname',
port=3306
)
SQLite的連接更為簡單:
import sqlite3
conn = sqlite3.connect('example.db')
執行SQL操作前需要創建游標:
cursor = connection.cursor()
cursor.execute("SELECT * FROM users")
results = cursor.fetchall() # 獲取所有記錄
# 或者
for row in cursor: # 逐行處理
print(row)
為了防止SQL注入,應該使用參數化查詢:
user_id = 1
cursor.execute("SELECT * FROM users WHERE id = %s", (user_id,))
不同數據庫的參數占位符可能不同:
- MySQL: %s
- SQLite: ?
- PostgreSQL: %s
sql = "INSERT INTO users (name, email) VALUES (%s, %s)"
values = ('John Doe', 'john@example.com')
cursor.execute(sql, values)
connection.commit() # 提交事務
批量插入:
users = [
('Alice', 'alice@example.com'),
('Bob', 'bob@example.com')
]
cursor.executemany(sql, users)
connection.commit()
sql = "UPDATE users SET email = %s WHERE id = %s"
cursor.execute(sql, ('new_email@example.com', 1))
connection.commit()
sql = "DELETE FROM users WHERE id = %s"
cursor.execute(sql, (1,))
connection.commit()
數據庫操作通常需要事務支持:
try:
cursor.execute("INSERT INTO users (name) VALUES ('Alice')")
cursor.execute("UPDATE accounts SET balance = balance - 100 WHERE user_id = 1")
connection.commit() # 提交事務
except Exception as e:
connection.rollback() # 回滾事務
print(f"Transaction failed: {e}")
雖然直接使用SQL靈活高效,但ORM(Object-Relational Mapping)框架提供了更Pythonic的操作方式。
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)
email = Column(String)
# 創建引擎和會話
engine = create_engine('sqlite:///example.db')
Session = sessionmaker(bind=engine)
session = Session()
# 查詢
users = session.query(User).filter(User.name == 'Alice').all()
# 插入
new_user = User(name='Bob', email='bob@example.com')
session.add(new_user)
session.commit()
from django.db import models
class User(models.Model):
name = models.CharField(max_length=100)
email = models.EmailField()
# 查詢
users = User.objects.filter(name__startswith='A')
# 創建
User.objects.create(name='Charlie', email='charlie@example.com')
對于高并發應用,應該使用連接池:
from sqlalchemy import create_engine
from sqlalchemy.pool import QueuePool
engine = create_engine(
'mysql+pymysql://user:pass@localhost/db',
poolclass=QueuePool,
pool_size=5,
max_overflow=10,
pool_timeout=30
)
executemany
代替循環單條插入SELECT *
Python提供了多種方式操作數據庫,從底層的DB-API到高級的ORM框架。對于簡單的項目,直接使用SQL可能更高效;對于復雜項目,ORM可以提高開發效率和代碼可維護性。無論哪種方式,都應該注意安全性和性能優化。
選擇合適的工具和方法,根據項目需求權衡靈活性和開發效率,是Python數據庫操作的關鍵。 “`
這篇文章涵蓋了Python數據庫操作的主要方面,包括基本連接、CRUD操作、事務管理、ORM框架使用以及性能和安全建議,總字數約1550字。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。