Django?保姆级地学习Python Web上手框架:Flask与数据库进阶-对象关系映射(ORM)

Django?保姆级地学习Python Web上手框架:Flask与数据库进阶-对象关系映射(ORM)

  • 前言
  • 上手Flask
  • 前期回顾
  • 对象关系映射(ORM)
    • 为什么要使用ORM
    • 使用ORM的缺点
  • Flask中的ORM:Flask-SQLAlchemy扩展
    • 安装Flask-SQLAlchemy扩展
    • 使用Flask-SQLAlchemy扩展
  • 后记

前言

这不,一年一度的寒假又来啦,又是一次拉开差距,提升自我的机会,这个寒假我打算专门攻击Python,全方位学习。首当其冲的就是Python Web了,为什么看好PyWeb,理由很简单,容易上手,可扩展性高,对于我们来说足够了。

既然学习Web,那肯定需要一个好的框架,工欲善其事,必先利其器。这里我选择的是Flask框架进行学习。对比Django这种重量级的框架,Flask是一种轻量级的框架,它不是保姆级的全部给你配置各种细节,而是全权需要你自己上手,这样你可以从头理解一个框架搭建的起来的原理和过程。

总之,一开始学习不建议学习保姆级的框架,而要进行保姆级的学习。这里不是你一个人,虽然它不是保姆级的框架,但是这里我会带你一起保姆级地学习Flask的各种搭建。

上手Flask

跟着学的网站:Python Web 从入门到实战【完整版】。记住这里一定要跟着网站学! 博客只是整理学习资料的,方便后续复习。

前期回顾

Django?保姆级地学习Python Web上手框架:Flask与mysql数据库

上一节我们学习了Flask与MySQL数据库的相关操作,还整理了一些Flask实战中可能会遇到的问题,主要是关于数据类型的问题。

对象关系映射(ORM)

何为对象关系映射?

对象关系映射,即Object Relational Mapping,简称ORM,是一种程序技术,用于实现面向对象程序设计里不同类型之间系统的数据之间的转换。

这里的不同类型的系统主要指的就是我们的程序系统和数据库系统之间了。

这样说可能有些抽象,那咋们先看看为什么使用ORM可能就好理解一些

为什么要使用ORM

  • 避免和复杂的SQL语句打交道
  • 提高开发效率,也更容易理解
  • 方便形成统一风格的代码
  • 带来一些安全性上的提升(如:SQL注入)

但是有优点也有缺点。

使用ORM的缺点

  • 系统消耗较大
  • 处理较为复杂的查找条件时,使用ORM不够灵活
  • 占用内存较大

Flask中的ORM:Flask-SQLAlchemy扩展

安装Flask-SQLAlchemy扩展

pip install flask-sqlalchemy

测试是否安装成功,直接导包,看看是否报错

from flask_sqlalchemy import SQLAlchemy

使用Flask-SQLAlchemy扩展

# 首先导包
from flask import Flask
from flask_sqlalchemy import SQLAlchemy

# 实例化app对象
app = Flask(__name__)
# 配置app.config中的SQLALCHEMY_DATABASE_URI,即配置数据库,格式如下:
app.config['SQLALCHEMY_DATABASE_URI'] = "mysql://账号:密码@服务器地址(本机为localhost)/数据库名"
# 根据配置好的app生成db(数据库对象),后续都是对这个数据库对象进行操作
db= SQLAlchemy(app)

创建表的映射

# 用类来进行表的映射,一个类就是一个表,一个实例就是一条数据,一个变量属性就是一个字段
# 继承db.Model,也就是数据库模型,数据库模型为我们提供增删改查等一系列操作
class User(db.Model):
    id = db.Column(db.Integer,primary_key=True)
    username = db.Column(db.String(32),unique=True)
    password = db.Column(db.String(32))
    def __init__(self,username,password):
        self.username = username
        self.password = password
    def add(self):
        try:
            db.session.add(self)
            db.session.commit()
            return self.id
        except Exception as e:
            db.session.rollback()
            return e
        finally:
            return 0
    def isExisted(self):
        # 下面这段代码的意思是在User表中执行查询query操作,
        # 查询的条件filter_by为username=self.username,password=self.password,然后将查询到的结果的第一条first返回
        temUser = User.query.filter_by(username=self.username,password=self.password).first()
        if temUser is None:
            self.add()
            return "该用户不存在,执行插入操作成功"
        else:
            return "该用户已经存在"

db.create_all()
#*************************以上就是服务的开启并监听,创建了一个数据库表User****************

其中,db.create_all()是创建所有的数据库表的功能,详解可见:python之flash-SQLalchemy框架中,阅读源代码解决db.create_all的问题!

后记

在学习了ORM后,要灵活使用,对于一些简单的增删改查的操作不必要自己写SQL语句,直接使用ORM里的增删改查更加规范,安全可靠;

对于一些复杂的查询等还是建议在ORM里直接写SQL语句更加灵活。

你可能感兴趣的:(笔记,python,flask,python,django,mysql,web)