前言
最近项目等待前端接接口,比较空闲.就想学习一些新东西.学啥呢?考虑到ORM的易用性,还是学习一下ORM.那么与Flask搭配的ORM有 flask-sqlalchemy 但是该组件专为Flask定制.
如 JWT与Flask-JWT,考虑到适用性,还是觉得学 SQLAlchemy好一些.
正文
安装
要想使用 SQLAlchemy,首当其冲的当然是安装啦
pip install sqlalchemy
建立model文件
然后我们在某个目录下新建一个 models.py 文件 (文件名叫models完全是因为我想到ORM脑子里第一个就是Django哈)
引入
我们引入相关模块
from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker from sqlalchemy.ext.declarative import declarative_base from sqlalchemy import Column, String, Integer
值得注意的是,最后一个引入引入的是各个字段(比如varchar等,建立model用,所以可能不止这几个,可以按情况来)
字段对照及约束
字段对照表如下
类型名 | 说明 |
---|---|
Integer | 整形 |
SmallInteger | 小整形 |
BigInteger | 长整形 |
Float | 浮点形 |
String | varchar |
Text | 长文本 text |
Boolean | tinyint |
Date | 日期 datetime.date |
Time | 时间 datetime.time |
DateTime | 日期和时间 datetime.datetime |
约束如下
选项 | 说明 |
---|---|
primary_key | 主键 |
unique | 唯一索引 |
index | 常规索引 |
nullable | 是否为空 默认为True |
default | 默认值 |
ForeignKey | 外键 |
连接数据库
我们在操作数据库前需要先连接数据库
这里以 pymysql 为例
# 用户名:密码@访问地址:端口/数据库?编码方式 engine = create_engine('mysql+mysqldb://root:***@***:***/website?charset=utf8mb4') # 创建DBSession类型 DBSession = sessionmaker(bind=engine) # 创建Base基类 Base = declarative_base()
这时候你可以运行该文件测试是否成功
如果报 ModuleNotFoundError: No module named 'MySQLdb' 错误是你缺少模块,安装即可(每个操作系统对应的模块不一样)
以下的如果pip安装失败,使用
yum install mysql-devel gcc gcc-devel python-devel
pip install mysqlclient
easy_install mysql-python (mix os) pip install mysql-python (mix os) apt-get install python-mysqldb (Linux Ubuntu) cd/usr/ports/databases/py-MySQLdb && make install clean (FreeBSD) yum install MySQL-python (linux Fedora, CentOS) pip install mysqlclient (Windows)
创建 model
下面我们写model
定义的字段和约束参考上面的表
class AdminUser(Base): # 用户表 __tablename__ = 'admin_user' # 表名 id = Column(Integer, primary_key=True) # 主键 username = Column(String(12), nullable=False, index=True) # 用户名,Varchar12位,不可为空,常规索引 pwd = Column(String(256), nullable=False) # 密码,不可为空 token = Column(String(256)) # token
想要将表应用到数据库,在最下面加上
Base.metadata.create_all(engine)
运行py文件即可
但是这种方式只能新建表,不能修改/删除表字段
这个时候我们需要该模块作者的另一力作 alembic