SQL
Alchemy的核心层面和ORM层面都具有防止
SQL
注入的保护措施。以下是在ORM层面进行防注入的示例代码:
from sqlalchemy.orm import Session
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import create_engine, Column, Integer, String
Base = declarative_base()
class User(Base):
__tablename__ = 'users'
id = Column(Integer, primary_key=True)
name = Column(String)
age = Column(Integer)
engine = create_engine('sqlite:///example.db')
Base.metadata.create_all(bind=engine)
session = Session(bind=engine)
# 防止注入的方法1:使用占位符
query = session.query(User).filter(User.name == 'John')
# 相当于 SELECT * FROM users WHERE name = 'John'
# 防止注入的方法2:使用参数绑定方式
query = session.query(User).filter(User.name == :name)
result = query.params(name='John').all()
# 相当于 SELECT * FROM users WHERE name = 'John'
在上面的示例代码中,通过使用占位符或参数绑定的方式,在ORM层面实现了防止SQL注入的保护。同时,也可以在核心层面通过使用SQL表达式语言来防止SQL注入。