【Python】深入掌握SQLAlchemy:原生SQL语句执行的艺术与技巧


我就站在布拉格黄昏的广场
在许愿池投下了希望
那群白鸽背对着夕阳
那画面太美我不敢看
布拉格的广场无人的走廊
我一个人跳着舞旋转
不远地方你远远吟唱
没有我你真的不习惯
                     🎵 蔡依林/周杰伦《布拉格广场》


简介:

欢迎进入 SQLAlchemy 的世界,一个强大的 Python SQL 工具包和对象关系映射(ORM)系统。在本篇博客中,我们将深入探讨如何在 SQLAlchemy 中执行原生 SQL 语句,无论是出于性能考虑还是为了执行复杂的查询和操作,直接使用 SQL 语句有时是必须的。我们将一步一步地了解如何利用 SQLAlchemy 来执行原生 SQL,让你能够更加灵活地与你的数据库进行交互。

引入 SQLAlchemy

首先,确保你已经安装了 SQLAlchemy,并且理解了基础概念如引擎(Engine)、会话(Session)等。如果还没有,可以通过简单的 pip 命令来安装它:

pip install SQLAlchemy

创建引擎(Engine)

SQLAlchemy 通过 Engine 管理与数据库的连接信息。创建一个 Engine 很简单:

from sqlalchemy import create_engine


engine = create_engine('sqlite:///example.db')  # 替换为你的数据库 URL
执行原生 SQL 查询
使用 Connection 对象
创建 Engine 后,使用 connect() 方法获取一个连接(Connection)对象,它提供了 execute() 方法来运行 SQL 语句:

python
Copy code
from sqlalchemy import text

with engine.connect() as connection:
    result = connection.execute(text("SELECT * FROM users WHERE id=:user_id"), {"user_id": 1})
    for row in result:
        print(row)

在这个例子中,我们使用 text() 函数构造了一个安全的 SQL 语句,并通过字典传递了参数。

事务管理

SQLAlchemy 通过连接(Connection)上下文自动管理事务。在 with 块结束时,如果没有错误发生,事务将自动提交;如果发生异常,事务将回滚。

使用 Session 对象

如果你已经在使用 ORM 功能,可能已经有了一个会话(Session)对象。你也可以通过 Session 来执行原生 SQL:

from sqlalchemy.orm import sessionmaker

Session = sessionmaker(bind=engine)
session = Session()

result = session.execute(text("SELECT * FROM users WHERE id=:user_id"), {"user_id": 1})
for row in result:
    print(row)

session.close()

执行插入、更新和删除

执行非查询语句也很类似:

with engine.connect() as connection:
    connection.execute(text("UPDATE users SET name=:name WHERE id=:user_id"), {"name": "Alice", "user_id": 1})
    connection.execute(text("DELETE FROM users WHERE id=:user_id"), {"user_id": 1})

请记得对于插入操作,使用 text() 与参数字典来防止 SQL 注入攻击。

总结

通过上述方法,你可以在 SQLAlchemy 中灵活地执行任何原生 SQL 语句。无论是查询、插入、更新还是删除操作,SQLAlchemy 都为你提供了一种安全且有效的方式来直接与数据库交流。

作者:音乐学家方大刚

物联沃分享整理
物联沃-IOTWORD物联网 » 【Python】深入掌握SQLAlchemy:原生SQL语句执行的艺术与技巧

发表回复