SQLAlchemy 使用(一)创建单一model

前言

 最近项目等待前端接接口,比较空闲.就想学习一些新东西.学啥呢?考虑到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

alembic的教程

原文地址:https://www.cnblogs.com/chnmig/p/10446341.html