SQLAlchemy 的 filer_by 功能可以防止 SQL 注入吗?

Does SQLAlchemy's filer_by function protect against SQL injection?

我想使用 SQLAlchemy filter_by 函数,但找不到 filter_by 函数转义输入以防止 SQL 注入的明确声明。我们的用法非常简单,但显然非常敏感。

 self.database.active_session()
        .query(Users)
        .filter_by(
            username=username,
            is_active=1
        ).first()

我在哪里可以阅读更多关于 filter_by 函数的信息,或者谁能告诉我它是否转义了输入?

这是 postgresql 连接的输出

# trying to inject
query = db.query(User).filter_by(username="'user'; drop table user; --"")
print(query)

输出

SELECT "user".id AS user_id, "user".created_at AS user_created_at, "user".updated_at AS user_updated_at, "user".username AS user_username, "user".hashed_password AS user_hashed_password, "user".is_active AS user_is_active, "user".is_superuser AS user_is_superuser 
FROM "user" 
WHERE "user".username = %(username_1)s

字符串值作为参数传递给查询,因此您可以免受 SQL 注入。