vlambda博客
学习文章列表

快速入门流行ORM框架~Flask-SQLAlchemy

文 | 远山近海

ORM概念

ORM是编程语言和数据库间的桥梁,它可以帮助我们实现自动生成SQL语句,自动建库,自动建表,甚至使我们在使用的时候无需关注我们使用的是什么数据库以及什么版本。
ORM可以使我们像 操作对象 那样操作数据库,省去了繁杂的SQL查询、建表、插入、删除等语句的编写,把精力全部投入到业务逻辑的编写中去。
由于不同的数据库的SQL是有所不同的,而有了ORM,我们就只需掌握ORM的语句即可,ORM会根据配置语句来判断你使用的是什么数据库,并根据建表、查询等相关语句来生成对应的该数据库所能识别的SQL来操作数据库。
当系统更换数据库的时候,只要修改ORM框架的相关配置语句即可,如果不使用ORM,更换数据库时就要修改大量的SQL语句,费时费力,把人折腾逼疯不在话下。
Java的ORM框架有Hibernate,Mybatis等。其中Hibernate完全不需要手写SQL语句,属于全自动化ORM框架。Mybatis仍需要手写SQL语句,属于半自动化ORM框架,也可以理解为可通过SQL语句灵活操作数据库的ORM框架 。

注意(敲黑板):

  1. ORM是未来发展的方向,大势所趋,现在的公司一般都使用ORM框架。所以,学习ORM框架才是向新技术靠拢,顺应大势的做法。
  2. 使用了ORM框架不意味着对SQL的放弃,一般性的SQL语句还是要掌握的。


Python的ORM工具--SQLAlchemy

SQLAlchemy是python的ORM工具,python与数据库间的桥梁,任何Python系统中都可以使用。

Flask-sqlalchemy——sqlalchemy的衍生物

Flask-sqlalchemy是对SQLAlchemy的进一步封装,可以理解为sqlalchemy的flask定制版,可以使工作再度简化。
使用前需安装 pip install Flask-sqlalchemy,同时,系统会自动将Flask-sqlalchemy的依赖SQLAlchemy也一并安装。
SQLAlchemy以及其衍生物Flask-SQLAlchemy都是重量级Python ORM框架,功能全面且易用性好,在易用性上,它至少比Django’s ORM好用。
Django’sORM我也学过,我可以负责任地告诉大家,Flask-SQLAlchemy绝对比Django’ORM好用。
举例来说Flask-SQLAlchemy的大于小于,以及大于等于和小于等于的写法是这样的:<、>、<=、>=,而Django’s ORM对应的写法则是:

__gt=xx  为大于xx

__gte=xx 为大于等于xx

__lt=xx  为小于xx

__lte=xx 为小于等于xx

另外,Flask-SQLAlchemy的多表查询也很方便,而Django’s ORM的多表查询则很麻烦,麻烦到我现在也不太清楚怎么使用的程度,并且我知道有的公司,他们在使用Django’sORM时,只在单表查询中使用,而多表查询时仍然使用sql语句。
在这里再强调一下, 在任何Python系统中,我们都可以使用Flask-SQLAlchemy,并不是必须得和Flask框架绑定 ,不使用Flask框架照样可以使用Flask-SQLAlchemy,这就像我们没有购买ThinkPad的笔记本,我们照样可以单独购买一个ThinkPad的鼠标。


初始化

 
   
   
 
使用时需引入 from flask_sqlalchemy import SQLAlchemy

注意:

1.   引入时使用的是下划线_,pip安装时使用的是上划线-

2.   import SQLAlchemy中,SQLA是大写

使用时,要先在根目录下创建一个数据库目录,如叫做db

快速入门流行ORM框架~Flask-SQLAlchemy

并需写如下代码:
 
   
   
 
app = Flask(__name__) # 创建了一个Flask类的实例
app.secret_key="123"
app.config["SQLALCHEMY_DATABASE_URI"] = "mysql+pymysql://tester1:[email protected]:3306/tpdb?charset=utf8"app.config["SQLALCHEMY_TRACK_MODIFICATIONS"]=Trueapp.config["SQLALCHEMY_ECHO"]=Truedb=SQLAlchemy(app)
 
详述:

app.config["SQLALCHEMY_DATABASE_URI"]= "mysql+pymysql://tester1:123456@127.0.0.1:3306/tpdb?charset=utf8"


红色的部分都是固定写法,代表这是数据库连接器
绿色部分代表使用mysql数据库,连接器使用pymysql
淡蓝色代表登录数据库的用户名和密码
紫色代表数据库的地址和端口
橙色代表代表数据库名
深蓝色代表编码格式,通常为utf8

oracle和sql server也是上面这个套路。
注意:
  1. utf8中间没有-

  2. 各个部分间的连接符号不能错

  3. 连接器也可以使用其他的,这里不再赘述


 
   
   
 
第四句 app.config["SQLALCHEMY_TRACK_MODIFICATIONS"]=True
是跟踪改变。
第五句 app.config["SQLALCHEMY_ECHO"]=True是指打印SQLAlchemy操作的对应SQL语句,这在编程过程中很有用,但在部署后就无用了,所以可在部署前注释掉。
第六句 是把数据库和站点关联起来:
  1. 1.  先把站点名称app传给SQLAlchemy
  2. 2.  db是步骤1的实例化,以后我们操作数据库,就都使用db这个实例化对象
注意:
  1. 在使用SQLAlchemy之前,必须先创建好数据库,SQLAlchemy可以帮我们建表,查询,但不能帮我们建库,如上例中的tpdb这个库,是提前先用命令行创建好的
  2. db=SQLAlchemy(app)这句,有另一种分开两句的写法:

db=SQLAlchemy()

db.init_app(app)

虽然这看起来语法没错,而且建表不会报错,但插入数据会报错。  
注意:这里再强调一下,在一个工程中,app只能有一个,在本章中,为了讲解SQLAlchemy,我们直接创建了app,但在实际开发中,通常是将创建app的语句写在一个单独的文件里,所有需要使用app的对象都去那个单独的文件里调用。
(下期预告:创建表)


无论上课或自学,

你首先需要准备:

每天 2 小时+的学习时间

每天坚持写代码的习惯!

有投入才有产出,

10k+的涨幅需要 1 年以上的努力!

祝你成功!


光荣之路出品