一、配置数据库
1、安装扩展库
安装pymysql扩展库
代码语言:javascript复制pip install pymysql
安装flask-sqlalchemy扩展库
代码语言:javascript复制pip install flask-sqlalchemy
本扩展库为flask用于操作数据库进行ORM转换
2、代码配置
总体代码如下(自行进行拆分)
代码语言:javascript复制<span class="hljs-keyword">from</span> flask <span class="hljs-keyword">import</span> Flask <span class="hljs-comment"># 导入Flask类</span>
<span class="hljs-comment"># 导入ORM转换库</span>
<span class="hljs-keyword">from</span> flask_sqlalchemy <span class="hljs-keyword">import</span> SQLAlchemy
app = Flask(__name__) <span class="hljs-comment"># 进行实例化</span>
<span class="hljs-comment"># 配置数据库</span>
<span class="hljs-comment"># 设置链接数据库的URI mysql pymysql://数据库用户名:密码@ip:端口/数据库名</span>
app.config[<span class="hljs-string">"SQLALCHEMY_DATABASE_URI"</span>] = <span class="hljs-string">"mysql pymysql://lucky:123456@127.0.0.1:3306/lucky"</span>
<span class="hljs-comment"># 禁止对象的修改追踪</span>
app.config[<span class="hljs-string">"SQLALCHEMY_TRACK_MODIFICATIONS"</span>] = <span class="hljs-keyword">False</span>
<span class="hljs-comment"># 创建数据库对象</span>
db = SQLAlchemy(app)
3、创建db三方对象
db.py
代码语言:javascript复制<span class="hljs-keyword">from</span> flask_sqlalchemy <span class="hljs-keyword">import</span> SQLAlchemy
db = SQLAlchemy()
4、初始化app对象
app.py
代码语言:javascript复制<span class="hljs-keyword">from</span> exts <span class="hljs-keyword">import</span> db
<span class="hljs-function"><span class="hljs-keyword">def</span> <span class="hljs-title">create_app</span><span class="hljs-params">()</span>:</span>
...
db.init_app(app)
二、设计模型
1、常见字段类型
类型名 | python类型 | 说明 |
---|---|---|
Integer | int | 存储整形 32位 |
SmallInteger | int | 小整形 16位 |
BigInteger | int | 长整型 |
Float | float | 浮点数 |
String | str | 不定长度 |
Text | str | 大型文本 |
Boolean | Bool | Boolean |
Date | datetime.date | 日期 |
Time | datetime.time | 时间 |
DateTime | datetime.datetime | 日期和时间 |
Enum | Str | 字符串 |
LargeBinary | str | 二进制文件 |
2、 可选约束条件
选项 | 说明 |
---|---|
primary_key | 是否设置为主键 默认False |
unique | 是否设置唯一索引 默认False |
index | 是否设置为常规索引 默认False |
nullable | 是否可以为空 默认True |
default | 设置默认值 |
3、常用的SQLAlchemy关系选项
选项 | 说明 |
---|---|
backref | 在关系的另一模型中添加反向引用 |
primary join | 明确指定两个模型之间使用的联结条件 |
uselist | 如果为False,不使用列表,而使用标量值 |
order_by | 指定关系中记录的排序方式 |
secondary | 指定多对多中记录的排序方式 |
secondary join | 在SQLAlchemy中无法自行决定时,指定多对多关系中的二级联结条件 |
4、修改数据库中的表名
表名默认为模型名小写,可以在模型中添加__tablename__
属性来设置表名
三、分析表结构与定义模型
需求: 创建用户表
1、一个用户表所需字段
用户名 性别 年龄 简介 是否删除
2、创建模型代码位置
models包
3、模型、属性、表之间的关联
一个模型类 对应数据库中的一张表 一个类属性 对应 表中的一个字段
4、创建用户表模型
代码语言:javascript复制<span class="hljs-class"><span class="hljs-keyword">class</span> <span class="hljs-title">User</span><span class="hljs-params">(db.Model)</span>:</span>
__tablename__ = <span class="hljs-string">"user"</span> <span class="hljs-comment"># 指定表名</span>
id = db.Column(db.Integer, primary_key=<span class="hljs-keyword">True</span>) <span class="hljs-comment"># 设置主键</span>
uusername = db.Column(db.String(<span class="hljs-number">12</span>)) <span class="hljs-comment"># 用户名 最大长度12</span>
usex = db.Column(db.Boolean, default=<span class="hljs-keyword">True</span>) <span class="hljs-comment"># 性别 默认为True</span>
uage = db.Column(db.Integer, default=<span class="hljs-number">18</span>) <span class="hljs-comment"># 年龄 默认20岁</span>
uinfo = db.Column(db.String(<span class="hljs-number">20</span>), default=<span class="hljs-string">'简介'</span>) <span class="hljs-comment"># 简介 默认简介</span>
isDelete = db.Column(db.Boolean, default=<span class="hljs-keyword">False</span>) <span class="hljs-comment"># 是否删除 默认不删除</span>