Flask 的 ORM 模型
发布时间:2023-06-30 14:22:57 所属栏目:教程 来源:
导读:在词条使用 Python 操作 MySQL 数据库中,通过 sql 语句访问数据库,繁琐易错。本小节介绍了用于简化访问数据库的 ORM 模型,ORM 模型定义了关系数据库和对象的映射关系,使得访问数据库的代码简单清晰、易于维护。
|
在词条使用 Python 操作 MySQL 数据库中,通过 sql 语句访问数据库,繁琐易错。本小节介绍了用于简化访问数据库的 ORM 模型,ORM 模型定义了关系数据库和对象的映射关系,使得访问数据库的代码简单清晰、易于维护。 1. 问题的产生 访问关系数据库的传统方式是:拼接 sql 语句。例如,向数据库中插入一条数据,根据要插入的数据拼接一条 sql INSERT 语句,下面的 Python 程序使用 sql 语句向数据库中插入一条学生的信息: sno = '20201916' name = '张三' age = gender = 'male' sql = 'INSERT INTO students(sno, name, age, gender) VALUES("%s", "%s", %d, "%s")' % (sno, name, age, gender) rows = cursor.execute(sql) 在第 5 行,Python 程序使用字符串运算符 % 根据参数 sno、name、age 和 gender 最终生成一条 sql 语句: INSERT INTO students(sno, name, age, gender) VALUES("", "张三", , "male"); 2. sql 语句重复利用率低 越复杂的 sql 语句条件越多、代码越长,在实际的项目中,会出现很多很相近的 sql 语句。 3. Web 安全漏洞 直接使用 sql 语句存在有 Web 安全漏洞的问题:通过把 sql 命令插入到页面请求的查询字符串,最终达到欺骗服务器执行恶意的 sql 命令。 下面的 sql 语句根据页面请求中的用户名和密码查询数据库: username = 从页面请求中获取用户名 password = 从页面请求中获取密码 sql = 'select * from users where username = "%s" and password = "%s"' % (username, password) 在第 3 行的 SELECT 语句中,where 条件进行权限检查,只有 username 和 password 与数据库表 users 中的数据匹配时,才返回有效数据,因此,只有用户输入正确的用户名和密码才可以获取数据。 这条 sql 语句存在有安全漏洞,假设用户在页面中输入的用户名为 admin"# (共 7 个字符,前 5 个字符是 admin,后面 2 个字符是 " 和 #),密码为 123456,则最终拼接的 sql 语句如下: select * from users where username = "admin"#" and password = "123456" 在 sql 中,# 是行注释,因此上述 sql 语句相当于: select * from users where username = "admin" 只要数据库表 users 中有 admin 这条记录,执行该条 sql 语句就会返回数据,这样对 password 的检查就彻底失效了。 (编辑:汽车网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
