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

相关推荐

  1. Python精通 SQLAlchemy执行原生 SQL 语句艺术

    2024-04-15 05:56:04       58 阅读
  2. FastAPI+Sqlalchemy执行【Mysql】原生sql

    2024-04-15 05:56:04       15 阅读
  3. SQLSQL语句执行顺序

    2024-04-15 05:56:04       11 阅读
  4. SQL执行原理

    2024-04-15 05:56:04       19 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-04-15 05:56:04       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-04-15 05:56:04       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-04-15 05:56:04       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-04-15 05:56:04       20 阅读

热门阅读

  1. 更全面使用SQLMap进行渗透测试

    2024-04-15 05:56:04       16 阅读
  2. Spring Boot 经典面试题(七)

    2024-04-15 05:56:04       21 阅读
  3. 项目一:认识python爬虫技术(小白入门级)

    2024-04-15 05:56:04       13 阅读
  4. Apache软件基金会的孵化标准和毕业标准

    2024-04-15 05:56:04       12 阅读
  5. Hive进阶Day05

    2024-04-15 05:56:04       10 阅读
  6. Python将相机图像采集的数据写入Redis

    2024-04-15 05:56:04       13 阅读
  7. hive metastore使用mysql作为backend db遇到的问题

    2024-04-15 05:56:04       14 阅读
  8. 跨域问题 及 解决

    2024-04-15 05:56:04       12 阅读
  9. 从零实现诗词GPT大模型:了解Transformer架构

    2024-04-15 05:56:04       14 阅读