本文共 2180 字,大约阅读时间需要 7 分钟。
SQLAlchemy 是 Python 中一款著名的 ORM 工具包,它通过 ORM(对象关系映射)方式,使开发者能够使用面向对象的方式操作数据库,从而简化了数据库开发过程。以下是一些关于 SQLAlchemy 的常用操作进行详细说明。
使用 SQLAlchemy 的第一步是创建 Engine 对象。Engine 包括数据库连接池和方言(Dialect),它们共同作用符合 DBAPI 规范与数据库交互。
from sqlalchemy import create_engineengine = create_engine("sqlite:///testdb.db")
数据库 URL 的格式为:dialect+driver://username:password@host:port/database
。
例如,连接 MySQL 数据库需要使用 pymysql
驱动:
engine = create_engine("mysql+pymysql://user:pwd@localhost/testdb")
同样, MSSQL 数据库可以使用 pymssql
驱动:
engine = create_engine("mssql+pymssql://user:pwd@localhost:1433/testdb")
默认情况下,可以通过 echo
参数控制是否输出执行日志。
数据库与 Python 对象的映射主要体现在以下三个方面:
Column
。例如,在数据库中存在 employees
表,通过 SQLAlchemy 定义映射关系:
from sqlalchemy.ext.declarative import declarative_baseBase = declarative_base()class Employee(Base): __tablename__ = 'employees' EMP_ID = Column(SmallInteger, primary_key=True) FIRST_NAME = Column(String(255)) LAST_NAME = Column(String(255)) # 其他字段
SQLAlchemy 提供了 Session 对象来管理数据库会话,可以将其想象成对象容器。
engine = create_engine("sqlite:///testdb.db", echo=False)Session = sessionmaker(bind=engine)session = Session()
employees = session.query(Employee).all()
为了更好的查看结果,可以自定义输出格式:
def to_formatted_table(tab_data): return tablib.Dataset().load(str(tab_data))
通过继承,增强模型的可读性:
import jsonclass ModelExt(object): def __repr__(self): fields = self.__dict__.copy() if "_sa_instance_state" in fields: del fields["_sa_instance_state"] return json.dumps(fields)
处理多表关系时, SQLAlchemy 提供了关系配置(relationship())来建立关联。
Using SQLAlchemy's relationship() to define table relationships:
result = session.query(User, Address).join(Address).all()
或者通过关系直接查询:
emps = session.query(User).all()for emp in emps: print(emp.addresses)
user = User(...)user.addresses = [addr1, addr2]session.add(user)session.commit()
session.delete(user)session.commit()
autoload
自动绑定表结构。sqlacodegen
自动生成模型代码,简化开发工作。通过以上方法,开发者能够方便地使用 SQLAlchemy 进行数据库操作,充分发挥其 ORM 的优势。
转载地址:http://ecthz.baihongyu.com/