2024年10月17日 SQLAlchemy执行SQL 极客笔记
在进行数据库操作时,通常可以使用ORM(Object-Relational Mapping)来操作数据库,但是有时候需要执行原生的SQL语句来完成一些特定的操作。SQLAlchemy是一个强大的Python ORM工具,可以用来执行SQL语句。
SQLAlchemy提供了text
类来执行原生的SQL语句。text
类接受SQL语句作为参数,并可以通过execute()
方法执行该SQL语句。
下面是一个简单的示例代码,演示如何使用SQLAlchemy执行SQL语句:
from sqlalchemy import create_engine, text
# 创建一个数据库引擎
engine = create_engine('sqlite:///example.db')
# 创建一个数据库连接
conn = engine.connect()
# 执行SQL语句
result = conn.execute(text("SELECT * FROM users"))
# 打印查询结果
for row in result:
print(row)
# 关闭数据库连接
conn.close()
在上面的示例中,我们首先创建了一个数据库引擎,然后使用connect()
方法创建了一个数据库连接。接着,我们通过text
类构造了一个SQL语句,并通过execute()
方法执行该SQL语句。最后,我们通过遍历查询结果的方式打印了查询结果,并关闭了数据库连接。
除了直接执行SQL语句外,SQLAlchemy还支持参数绑定,可以避免SQL注入攻击,并提高代码的可读性。
下面是一个带参数绑定的示例代码:
from sqlalchemy import create_engine, text
# 创建一个数据库引擎
engine = create_engine('sqlite:///example.db')
# 创建一个数据库连接
conn = engine.connect()
# 执行带参数绑定的SQL语句
stmt = text("SELECT * FROM users WHERE id = :id")
result = conn.execute(stmt, id=1)
# 打印查询结果
for row in result:
print(row)
# 关闭数据库连接
conn.close()
在上面的示例中,我们使用了:id
来表示参数,然后在执行SQL语句时传入参数的值。SQLAlchemy会自动处理参数的绑定,确保传入的参数值是安全的。
在实际的数据库操作中,有时需要使用事务来保证数据的一致性。SQLAlchemy也提供了事务的支持,可以通过begin()
, commit()
和rollback()
方法来控制事务的提交和回滚。
下面是一个简单的示例代码,演示如何使用事务操作:
from sqlalchemy import create_engine, text
# 创建一个数据库引擎
engine = create_engine('sqlite:///example.db')
# 创建一个数据库连接
conn = engine.connect()
# 开始事务
trans = conn.begin()
try:
# 执行SQL语句
conn.execute(text("INSERT INTO users (name, age) VALUES ('Alice', 30)"))
# 提交事务
trans.commit()
except:
# 回滚事务
trans.rollback()
# 关闭数据库连接
conn.close()
在上面的示例中,我们首先调用begin()
方法开始一个事务,然后在事务中执行SQL语句。如果SQL语句执行成功,则调用commit()
方法提交事务;如果出现异常,则调用rollback()
方法回滚事务。最后,我们关闭了数据库连接。
使用SQLAlchemy执行SQL语句可以更灵活地操作数据库,尤其是在需要执行原生SQL语句或者处理事务的情况下。通过text
类和参数绑定,可以有效防止SQL注入攻击,并提高代码的可读性。同时,通过事务操作可以保证数据的一致性,确保数据操作的安全性。
本文链接:http://so.lmcjl.com/news/15599/