赵走x博客
网站访问量:151457
首页
书籍
软件
工具
古诗词
搜索
登录
Flask 实战:41、电子邮件进阶实践
Flask 实战:40、使用事务邮件服务SendGird
Flask 实战:39、使用Flask-Mail发送电子邮件
Flask 实战:38、数据库进阶实践
Flask 实战:37、更新数据库表
Flask 实战:36、定义关系
Flask 实战:35、在视图函数里操作数据库
Flask 实战:34、数据库操作:CRUD
Flask 实战:33、使用Flask-SQLAlchemy管理数据库
Flask 实战:32、ORM魔法
Flask 实战:31、数据库的分类
Flask 实战:30、单个页面多个表单
Flask 实战:29、单个表单多个提交按钮
Flask 实战:28、使用Flask-CKEditor集成富文本编辑器
Flask 实战:27、多文件上传
Flask 实战:26、文件上传
Flask 实战:25、自定义验证器
Flask 实战:24、使用宏渲染表单
Flask 实战:23、设置错误消息语言
Flask 实战:22、处理表单数据
Flask 实战:21、使用Flask-WTF处理表单
Flask 实战:20、HTML表单
Flask 实战:19、模板进阶实践
Flask 实战:18、模板结构组织
Flask 实战:17、模板辅助工具
Flask 实战:16、模板基本用法
Flask 实战:15、HTTP进阶实践
Flask 实战:14、Flask上下文
Flask 实战:13、HTTP响应
Flask 实战:12、HTTP请求
Flask 实战:11、请求响应循环
Flask 实战:10、Flask与MVC架构
Flask 实战:9、模板与静态文件
Flask 实战:8、Flask命令
Flask 实战:7、URL与端点
Flask 实战:6、项目配置
Flask 实战:5、Flask扩展
Flask 实战:4、Python Shell
Flask 实战:3、启动开发服务器
Flask 实战:2、Hello,Flask!
Flask 实战:1、初识Flask
Flask 实战:32、ORM魔法
资源编号:75883
Python Web
Flask Web开发实战:入门、进阶与原理解析
热度:97
在Web应用里使用原生SQL语句操作数据库主要存在下面两类问题: * 手动编写SQL语句比较乏味,而且视图函数中加入太多SQL语句会降低代码的易读性。另外还会容易出现安全问题,比如SQL注入。 * 常见的开发模式是在开发时使用简单的SQLite,而在部署时切换到MySQL等更健壮的DBMS。但是对于不同的DBMS,我们需要使用不同的Python接口库,这让DBMS的切换变得不太容易。
在Web应用里使用原生SQL语句操作数据库主要存在下面两类问题: * 手动编写SQL语句比较乏味,而且视图函数中加入太多SQL语句会降低代码的易读性。另外还会容易出现安全问题,比如SQL注入。 * 常见的开发模式是在开发时使用简单的SQLite,而在部署时切换到MySQL等更健壮的DBMS。但是对于不同的DBMS,我们需要使用不同的Python接口库,这让DBMS的切换变得不太容易。 > 注意 尽管使用ORM可以避免SQL注入问题,但你仍然需要对传入的查询参数进行验证。另外,在执行原生SQL语句时也要注意避免使用字符串拼接或字符串格式化的方式传入参数。 使用ORM可以很大程度上解决这些问题。它会自动帮你处理查询参数的转义,尽可能地避免SQL注入的发生。另外,它为不同的DBMS提供统一的接口,让切换工作变得非常简单。ORM扮演翻译的角色,能够将我们的Python语言转换为DBMS能够读懂的SQL指令,让我们能够使用Python来操控数据库。 > 附注 尽管ORM非常方便,但如果你对SQL相当熟悉,那么自己编写SQL代码可以获得更大的灵活性和性能优势。就像是使用IDE一样,ORM对初学者来说非常方便,但进阶以后你也许会想要自己掌控一切。 ORM把底层的SQL数据实体转化成高层的Python对象,这样一来,你甚至不需要了解SQL,只需要通过Python代码即可完成数据库操作,ORM主要实现了三层映射关系: * 表→Python类。 * 字段(列)→类属性。 * 记录(行)→类实例。 比如,我们要创建一个contacts表来存储留言,其中包含用户名称和电话号码两个字段。在SQL中,下面的代码用来创建这个表: ``` CREATE TABLE contacts( name varchar(100) NOT NULL, phone_number varchar(32), ); ``` 如果使用ORM,我们可以使用类似下面的Python类来定义这个表: ``` from foo_orm import Model, Column, String class Contact(Model): __tablename__ = 'contacts' name = Column(String(100), nullable=False) phone_number = Column(String(32)) ``` 要向表中插入一条记录,需要使用下面的SQL语句: ``` INSERT INTO contacts(name, phone_number) VALUES('Grey Li', '12345678'); ``` 使用ORM则只需要创建一个Contact类的实例,传入对应的参数表示各个列的数据即可。下面的代码和使用上面的SQL语句效果相同: ``` contact = Contact(name='Grey Li', phone_number='12345678') ``` 除了便于使用,ORM还有下面这些优点: * 灵活性好。你既能使用高层对象来操作数据库,又支持执行原生SQL语句。 * 提升效率。从高层对象转换成原生SQL会牺牲一些性能,但这微不足道的性能牺牲换取的是巨大的效率提升。 * 可移植性好。ORM通常支持多种DBMS,包括MySQL、PostgreSQL、Oracle、SQLite等。你可以随意更换DBMS,只需要稍微改动少量配置。 使用Python实现的ORM有SQLAlchemy、Peewee、PonyORM等。其中SQLAlchemy是Python社区使用最广泛的ORM之一,我们将介绍如何在Flask程序中使用它。SQL-Alchemy,直译过来就是SQL炼金术,下一节我们会见识到SQLAlchemy的神奇力量。