博客
关于我
SQLAlchemy简明教程
阅读量:687 次
发布时间:2019-03-17

本文共 2180 字,大约阅读时间需要 7 分钟。

SQLAlchemy 是 Python 中一款著名的 ORM 工具包,它通过 ORM(对象关系映射)方式,使开发者能够使用面向对象的方式操作数据库,从而简化了数据库开发过程。以下是一些关于 SQLAlchemy 的常用操作进行详细说明。

1. 数据库连接

使用 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 参数控制是否输出执行日志。

2. 数据库映射

数据库与 Python 对象的映射主要体现在以下三个方面:

  • 数据库表映射为 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))    # 其他字段

3. 单表 CRUD 操作

SQLAlchemy 提供了 Session 对象来管理数据库会话,可以将其想象成对象容器。

创建 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)

CRUD 方法

  • querying 对应查询
  • add(), commit() 和 fetch() Optional() 来进行增删改查。

4. 多表 CRUD 操作

处理多表关系时, 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()

5. 注意事项

  • SQLALCHEMY 的默认行为通常与数据库层面的事务规范保持一致。
  • 建议通过 autoload 自动绑定表结构。
  • 使用 sqlacodegen 自动生成模型代码,简化开发工作。

通过以上方法,开发者能够方便地使用 SQLAlchemy 进行数据库操作,充分发挥其 ORM 的优势。

转载地址:http://ecthz.baihongyu.com/

你可能感兴趣的文章
Objective-C——判断对象等同性
查看>>
objective-c中的内存管理
查看>>
Objective-C之成魔之路【7-类、对象和方法】
查看>>
Objective-C享元模式(Flyweight)
查看>>
Objective-C以递归的方式实现二叉搜索树算法(附完整源码)
查看>>
Objective-C内存管理教程和原理剖析(三)
查看>>
Objective-C实现 Greedy Best First Search最佳优先搜索算法(附完整源码)
查看>>
Objective-C实现 jugglerSequence杂耍者序列算法 (附完整源码)
查看>>
Objective-C实现 lattice path格子路径算法(附完整源码)
查看>>
Objective-C实现1000 位斐波那契数算法(附完整源码)
查看>>
Objective-C实现2 个数字之间的算术几何平均值算法(附完整源码)
查看>>
Objective-C实现2d 表面渲染 3d 点算法(附完整源码)
查看>>
Objective-C实现2D变换算法(附完整源码)
查看>>
Objective-C实现3n+1猜想(附完整源码)
查看>>
Objective-C实现3n+1猜想(附完整源码)
查看>>
Objective-C实现9x9乘法表算法(附完整源码)
查看>>
Objective-C实现9×9二维数组数独算法(附完整源码)
查看>>
Objective-C实现A*(A-Star)算法(附完整源码)
查看>>
Objective-C实现A-Star算法(附完整源码)
查看>>
Objective-C实现abbreviation缩写算法(附完整源码)
查看>>