一.ORM设计思想
相对于数据库的操作,设计DAO结构的目的是简化数据库的操作,把SQL语句封装到基础类(BasDao)中,但是要求开发人员必须特别熟悉SQL语句和Python的基础.自己设计Dao的优点,有效防止SQL注入风险.通过使用ORM避免不会SQL的开发人员能够快速的使用/操作数据库,ORM的思想是将实体类(Model或Entries)和数据库表直接建立关联关系,即类->表,类对象->表中的记录,类对象的属性->表中的字段.
ORM(Object Relationship Mapping)对象关系映射.
- 类和表
- 类实例即是表的记录
- 类属性即为表的字段
当ORM关系映射成功之后,直接操作类或对象,即操作数据库中表或记录
简单的实现ORM(自省+元类)
class User():
id = 100
name = 20
class UserDB():
def save(user:User):
sql = "insert into user(id,name) values (%s,%s)"
with self.db as c:
c.execute(sql,args=(user.id,user.name))
return False
二.Flask-SQLAlchemy插件
2.1安装
pip install flask-sqlchemy -i https://mirrors.aliyun.com/pypi/simple
2.2配置
在settings.Dev类进行配置
数据库连接的路径 dialect+driver://user:password@ip:port/db?charset=utf8
SQLCHEMY_DATABASE_URI = 'mysql+pymysql://root:123456@192.168.109.138:3306/bank'
SQLALCHEMY_TRACK_MODIFICATIONS = True # 可扩展
SQLALXHEMY_COMMIT_ON_TEARDOWN = True # 回收资源时,自动提交事务
SQLALCHEMY_ECHO = True # 测试调试SQL
2.3创建SQLAlichemy实例并初始化
创建models模块,在它的__init__.py脚本中创建
from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy()
在创建Flask对象app的脚本中,初始化SQLAlchemy类对象
from models import db
...
db.init_app(app) # 初始化应用环境
2.4实战项目
1.将银行系统下的所有表,创建相应的模型类
1.1声明用户的模型类UserEntity,继承db.Model父类
# 默认情况下:类名即为表名
class User(db.Model):
2.更新所有的查询列表页面
2.1在用户的list2路由的处理函数中使用User模型类
from models import User
data = {
'users': User.query.all(),
'session':session
}
User.query.all()从数据库中查询所有的用户信息