1.介绍
django框架有独属于它自己的ORM框架,然而flask没有自己的ORM框架,但是python中有许多ORM框架,就比如:SQLAlchemy
今天我们就学习在flask中使用SQLAlchemy
关于ORM:
全称Object Relational Mapping(对象关系映射)。
特点是操纵Python对象而不是SQL查询,也就是在代码层面考虑的是对象,而不是SQL,体现的是一种程序化思维,这样使得Python程序更加简洁易读。
具体的实现方式是将数据库表转换为Python类,其中数据列作为属性,数据库操作作为方法。
优点:
- 简洁易读:将数据表抽象为对象(数据模型),更直观易读
- 可移植:封装了多种数据库引擎,面对多个数据库,操作基本一致,代码易维护
- 更安全:有效避免SQL注入
2.使用步骤
1.安装
pip install SQLalchemy
2. 创建连接
engine = create_engine(
用户名:密码@地址:端口/数据库名?编码
"mysql+pymysql://root:123@127.0.0.1:3306/db001?charset=utf8",
max_overflow=0, # 超过连接池大小外最多创建的连接
pool_size=5, # 连接池大小
pool_timeout=30, # 池中没有线程最多等待的时间,否则报错
pool_recycle=-1 # 多久之后对线程池中的线程进行一次连接的回收(重置)
)
注意:
1.我这里连接的数据库是mysql
2.使用的是模块pymysql操作mysql------------安装pip install pymysql
3. 创建数据库表类(模型)
前面有提到ORM的重要特点,那么我们操作表的时候就需要通过操作对象来实现,现在我们来创建一个类,以常见的用户表举例:
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy import Column, String, create_engine, Integer,
Text, DateTime, UniqueConstraint, Index, ForeignKey
Base = declarative_base()
class Users(Base):
__tablename__ = "users" #表明
id = Column(Integer, primary_key=True)
name = Column(String(64), unique=True)
email = Column(String(64))
def __str__(self):
return self.name
def __repr__(self):
return self.name
declarative_base()是sqlalchemy内部封装的一个方法,通过其构造一个基类,这个基类和它的子类,可以将Python类和数据库表关联映射起来。
数据库表模型类通过__tablename__和表关联起来,Column表示数据表的列。
4. 生成数据库表
Base.metadata.create_all(engine)