带有参数化SQL语句的SQLAlchemy Connection.execute()
SQLAlchemy的connection.execute()方法允许开发人员执行SQL语句并转换结果放入地图数组中。虽然使用字符串格式进行参数替换是一种常见做法,但它会带来安全风险并限制灵活性。
为了增强代码安全性并启用参数化,可以利用 sqlalchemy.sql.text() 函数创建参数化SQL 语句。这种方法可确保正确处理绑定参数,降低 SQL 注入攻击的风险。
要将参数化合并到问题中提供的 __sql_to_data() 函数中,请将其修改为以下内容:
def __sql_to_data(sql_text, parameters): result = [] connection = engine.connect() try: rows = connection.execute(sql_text, parameters) for row in rows: result_row = {} for col in row.keys(): result_row[str(col)] = str(row[col]) result.append(result_row) finally: connection.close() return result
sql_text参数应该是通过sqlalchemy.sql.text()解析的SQL语句,parameters参数是一个字典,包含要解析的值
现在,您可以将字典传递给execute()方法,而不是使用字符串格式插入参数:
return __sql_to_data(sql_get_profile, {'user_id': user_id})
这种方法提供了一种安全灵活的方式来传递SQLAlchemy 的 connection.execute() 方法中的参数。
以上是如何安全地使用 SQLAlchemy 的 Connection.execute() 和参数化 SQL 语句?的详细内容。更多信息请关注PHP中文网其他相关文章!