在 Python 中连接和操作数据库通常使用数据库驱动程序或 ORM(对象关系映射)工具。以下是常见的数据库连接和操作方式:
1. 连接关系型数据库(如 MySQL、PostgreSQL、SQLite)
使用 mysql-connector-python 连接 MySQL
安装 MySQL 驱动:
pip install mysql-connector-python
连接数据库并操作:
import mysql.connector
# 连接数据库
conn = mysql.connector.connect(
host="localhost",
user="root",
password="yourpassword",
database="testdb"
)
# 创建游标
cursor = conn.cursor()
# 执行 SQL 查询
cursor.execute("SELECT * FROM users")
# 获取结果
results = cursor.fetchall()
for row in results:
print(row)
# 关闭连接
cursor.close()
conn.close()
使用 psycopg2 连接 PostgreSQL
安装 PostgreSQL 驱动:
pip install psycopg2
连接数据库并操作:
import psycopg2
# 连接数据库
conn = psycopg2.connect(
host="localhost",
dbname="testdb",
user="postgres",
password="yourpassword"
)
# 创建游标
cursor = conn.cursor()
# 执行 SQL 查询
cursor.execute("SELECT * FROM users")
# 获取结果
results = cursor.fetchall()
for row in results:
print(row)
# 关闭连接
cursor.close()
conn.close()
使用 sqlite3 连接 SQLite
SQLite 是 Python 标准库的一部分,无需额外安装。
import sqlite3
# 连接数据库(如果数据库不存在,会自动创建)
conn = sqlite3.connect("example.db")
# 创建游标
cursor = conn.cursor()
# 创建表
cursor.execute("""
CREATE TABLE IF NOT EXISTS users (
id INTEGER PRIMARY KEY,
name TEXT NOT NULL,
age INTEGER
)
""")
# 插入数据
cursor.execute("INSERT INTO users (name, age) VALUES ('Alice', 30)")
cursor.execute("INSERT INTO users (name, age) VALUES ('Bob', 25)")
# 提交事务
conn.commit()
# 查询数据
cursor.execute("SELECT * FROM users")
results = cursor.fetchall()
for row in results:
print(row)
# 关闭连接
cursor.close()
conn.close()
2. 使用 ORM 工具(如 SQLAlchemy)
ORM(对象关系映射)工具可以将数据库表映射为 Python 类,简化数据库操作。
使用 SQLAlchemy 连接 MySQL
安装 SQLAlchemy 和 MySQL 驱动:
pip install sqlalchemy mysql-connector-python
使用 SQLAlchemy 操作数据库:
from sqlalchemy import create_engine, Column, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import sessionmaker
# 创建引擎
engine = create_engine("mysql+mysqlconnector://root:yourpassword@localhost/testdb")
# 创建基类
Base = declarative_base()
# 定义模型
class User(Base):
__tablename__ = "users"
id = Column(Integer, primary_key=True)
name = Column(String(50))
age = Column(Integer)
# 创建表
Base.metadata.create_all(engine)
# 创建会话
Session = sessionmaker(bind=engine)
session = Session()
# 插入数据
new_user = User(name="Alice", age=30)
session.add(new_user)
session.commit()
# 查询数据
users = session.query(User).all()
for user in users:
print(user.id, user.name, user.age)
# 关闭会话
session.close()
3. 连接 NoSQL 数据库(如 MongoDB)
使用 pymongo 连接 MongoDB
安装 MongoDB 驱动:
pip install pymongo
连接 MongoDB 并操作:
from pymongo import MongoClient
# 连接 MongoDB
client = MongoClient("mongodb://localhost:27017/")
# 选择数据库
db = client["testdb"]
# 选择集合(类似于表)
collection = db["users"]
# 插入文档
user = {"name": "Alice", "age": 30}
collection.insert_one(user)
# 查询文档
users = collection.find()
for user in users:
print(user)
# 关闭连接
client.close()
4. 使用 Pandas 操作数据库
Pandas 可以方便地将数据库查询结果转换为 DataFrame。
使用 Pandas 读取 SQL 数据
安装 Pandas 和数据库驱动:
pip install pandas sqlalchemy
读取 SQL 数据:
import pandas as pd
from sqlalchemy import create_engine
# 创建引擎
engine = create_engine("mysql+mysqlconnector://root:yourpassword@localhost/testdb")
# 读取 SQL 数据到 DataFrame
df = pd.read_sql("SELECT * FROM users", engine)
print(df)
总结
- 对于关系型数据库(如 MySQL、PostgreSQL、SQLite),可以使用
mysql-connector-python、psycopg2 或 sqlite3。 - 对于 ORM 操作,推荐使用 SQLAlchemy。
- 对于 NoSQL 数据库(如 MongoDB),可以使用 pymongo。
- 如果需要将数据库数据转换为 DataFrame,可以使用 Pandas。