【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 都为你提供了一种安全且有效的方式来直接与数据库交流。

  • 7
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值