1
- @classmethod
- def query_by_index(cls, cursor, table_name, sql):
- cursor.execute(sql)
- return cursor.fetchall()
2 直接在SQL语句中f-string来插入参数 会增加SQL注入的风险
您可以直接在SQL语句中使用f-string来插入参数,但这样做可能会增加SQL注入的风险。如果
instId参数来自不可信的源,那么恶意的输入可能会破坏SQL查询的结构并执行非预期的命令。这就是为什么我们通常建议使用参数化查询,即使用占位符(如%s)并将参数作为元组传递给
cursor.execute()方法。这样,数据库驱动程序将负责正确地转义参数,从而避免SQL注入攻击。但是,如果您完全控制
instId的值,并且确保它是安全的,那么可以直接在SQL语句中插入参数。
- @classmethod
- def query_by_instId(cls, cursor, table_name, instId):
- cursor.execute(
- f"SELECT * FROM {table_name} WHERE instId = '{instId}'"
- )
- return cursor.fetchall()
3 execute (instId,) 元组参数 %s 避免sql攻击
- @classmethod
- def query_by_instId(cls, cursor, table_name, instId):
- cursor.execute(
- "SELECT * FROM {table_name} WHERE instId = %s".format(table_name=table_name),
- (instId,)
- )
- return cursor.fetchall()