开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第7天,点击查看活动详情
之前的博客聊了聊flask的知识点,从flask项目创建到模板渲染都聊过了,那么接下来聊聊Flask数据库操作。
ORM
学习Python之初,很多人都学习过pymysql模块进行数据库操作,但是在flask当中的数据库操作更加方便的是使用ORM。
那么先来了解一下什么是ORM,(数据库关系映射),就是通过面向对象的方法来描述数据库,操作数据库的时候,不直接操作数据本身,而是操作和数据库进行映射的类,然后把类的操作反馈到数据库,再把操作结果返回回来,这样就类似在Python和数据库中间添加了一个翻译,这样的好处和坏处都是显而易见的:
好处:
1、开发者避免直接使用数据库,降低了初学者开发的难度。
2、项目不再关注不同类型数据库导致的sql语句修改问题,这个问题被ORM模块解决了。
坏处:
1、本来直接和数据库进行交互,中间多了一层转接,效率自然会降下来。
2、ORM来对接数据库也导致了,开发者要基于数据库的逻辑学习ORM操作,并且ORM操作并不能灵活的复现sql语句的语法,所以遇到复杂的多表逻辑查询会有不足。
所以,我们总结一下:ORM降低了Flask数据库操作的成本和使用难度,但是对于大数据和复杂的项目查询还是需要谨慎的。
SQLAlchemy
SQLAlchemy是Python当中很受欢迎三方的一个ORM模块,可以支持sqlite3, mysql(mariadb), sql server, postgreSQL, oracle五种数据库,常规的项目使用是足够的。
SQLAlchemy连接数据库是通过uri的格式,这个和pymysql是不同的,我们进行一一列举:
sqlite3
sqlite:///foo.db
mysql
mysql+pymysql://username:password@localhost/数据库
sql server
mssql+pymssql://username:password@localhost/数据库
postgreSQL
postgresql://username:password@localhost/数据库
oracle
oracle://username:password@localhost/数据库
基本的使用流程如下:
engine = create_engine(DB_URI) # 创建引擎
conn = engine.connect() # 连接
result = conn.execute('SELECT 1') # 执行SQL
print(result.fetchone())
conn.close() # 关闭连接
这里要注意的是SQLAlchemy调用不同类型的数据库的时候还是需要Python基于这个数据库的底层模块的,比如调用mysql,除了安装SQLAlchemy之外,还需要安装pymysql,其他的也是这样的
Flask-SQLAlchemy配置
flask默认采用SQLAlchemy进行数据库操作,但是也进行了二次封装,在使用的时候更加方便,代码如下:
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app.config['SQLALCHEMY_DATABASE_URI'] = 'pymysql://root:mysql@127.0.0.1:3306/test31'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
app.config['SQLALCHEMY_ECHO'] = True
| 配置 | 描述 |
|---|---|
| SQLALCHEMY_DATABASE_URI | 设置数据库连接地址 |
| SQLALCHEMY_TRACK_MODIFICATIONS | 是否追踪数据库修改(开启后会触发一些钩子函数) 一般不开启, 会影响性能 |
| SQLALCHEMY_ECHO | 是否显示底层执行的SQL语句,这个感觉相当有用 |