SQLAlchemy使用指南
SQLAlchemy 是一个 Python SQL 工具包和 ORM 库,提供了对数据库的高级抽象和操作。
安装 SQLAlchemy
首先,确保你已经安装了 SQLAlchemy 和数据库驱动程序,例如 SQLite、PostgreSQL 或 MySQL。
这里我使用MySQL
pip install sqlalchemy
对于具体的数据库驱动程序:
- SQLite 已内置在 Python 中,无需额外安装。
- PostgreSQL:
pip install psycopg2-binary
- MySQL:
pip install mysql-connector-python
注意 安装
mysqlclient
对于新版本已经失效
基础使用
1. 创建数据库连接和会话
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
# 创建数据库引擎
engine = create_engine('mysql+mysqlconnector://username:password@hostname/test')
# 创建会话类
Session = sessionmaker(bind=engine)
session = Session()
2. 定义模型
使用 SQLAlchemy 的 ORM 功能定义数据模型。
from sqlalchemy import Column, Integer, String, Sequence
from sqlalchemy.ext.declarative import declarative_base
Base = declarative_base()
class User(Base):
__tablename__ = 'users'
id = Column(Integer, Sequence('user_id_seq'), primary_key=True)
name = Column(String(50))
email = Column(String(50))
remark = Column(String(50))
def __repr__(self):
return f"<User(name='{self.name}', email='{self.email}', remark='{self.remark}')>"
3. 创建数据库表
Base.metadata.create_all(engine)
4. 添加数据
# 创建一个新的用户实例
new_user = User(name='Jack', email='Jack@gmail.com', remark='Jack')
# 添加并提交
session.add(new_user)
session.commit()
5. 查询数据
# 查询所有用户
users = session.query(User).all()
for user in users:
print(user)
# 查询特定用户
user = session.query(User).filter_by(name='Jack').first()
print(user)
6. 更新数据
user = session.query(User).filter_by(name='Jack').first()
user.remark = 'update'
session.commit()
7. 删除数据
user = session.query(User).filter_by(name='Jack').first()
session.delete(user)
session.commit()
高级功能
1. 关系(Relationships)
使用 relationship
定义表之间的关系。
from sqlalchemy import ForeignKey
from sqlalchemy.orm import relationship
class Address(Base):
__tablename__ = 'addresses'
id = Column(Integer, primary_key=True)
address = Column(String, nullable=False)
user_id = Column(Integer, ForeignKey('users.id'))
user = relationship("User", back_populates="addresses")
User.addresses = relationship("Address", order_by=Address.id, back_populates="user")
2. 执行原生 SQL 语句
你可以直接执行原生 SQL 语句。
result = engine.execute("SELECT * FROM users")
for row in result:
print(row)
3. 使用 SQLAlchemy Core
(核心)
SQLAlchemy Core 提供了更接近 SQL 的抽象层,可以使用 Table
和 Column
对象进行操作。
from sqlalchemy import Table, MetaData
metadata = MetaData()
users_table = Table('users', metadata, autoload_with=engine)
# 插入数据
engine.execute(users_table.insert(), {
"name": "Jack", "email": "Jack@gmail.com", "remark": "insert"})
# 查询数据
result = engine.execute(users_table.select())
for row in result:
print(row)
小结
SQLAlchemy 提供了灵活而强大的工具来处理数据库操作,从简单的 ORM 映射到复杂的 SQL 查询都能轻松应对。使用 SQLAlchemy 可以大大简化数据库操作的代码,提高代码的可维护性和可读性。
强烈推荐阅读:SQLAlchemy 文档。