SQLAlchemy的使用
1. Flask中配置数据库
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
# # 使用pymysql替代MySQLdb
# import pymysql
# pymysql.install_as_MySQLdb()
#1. 创建flask应用
app = Flask(__name__)
#2. 配置flask数据库URI信息
# app.config['SQLALCHEMY_DATABASE_URI']="mysql://用户名:密码@数据库服务器地址:端口号/数据库名"
app.config["SQLALCHEMY_DATABASE_URI"] = "mysql+pymysql://root:123456@localhost:3306/blog"
#取消SQLAlchemy的信号追踪
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
#3.生成父类数据库映射模型
db = SQLAlchemy(app)
if __name__ == "__main__":
app.run(debug=True)
2.数据库实体类创建
1. 实体类:根据数据库中的表结构而创建出来的类(模型类,实体类)
- 语法
class MODELNAME(db.Model):
__tablename__="TABLENAME"
COLUMN_NAME = db.Column(db.TYPE,OPTIONS)
示例:
#创建数据库实体类
class Users(db.Model):
__tablename__ = "users"
id = db.Column(db.Integer,primary_key=True)
username = db.Column(db.String(80),unique=True,index=True)
age = db.Column(db.Integer,nullable=True)
# 将创建的实体类映射到数据库,生成表,只有数据库中表不存在才会创建
db.create_all()
#删除所有数据表
#db.drop_all()
- MODELNAME:定义模型类的名称,可以根据表名而设定
- TABLENAME:映射到数据库中表名
- COMLUMN_NAME:属性名,映射到数据库就是列名
- TYPE:映射到列的数据类型
- OPTIONS:列选项
- db.TYPE 列类型如下:
类型名 | python类型 | 说明 |
---|---|---|
Integer | int | 普通整数,32位 |
SmallInteger | int | 小范围整数,16位 |
BigInteger | int或long | 不限精度整数 |
Float | float | 浮点数 |
Numeric | decimal.Decimal | 定点数 |
String | str | 字符串 |
Text | str | 字符串 |
Boolean | bool | 布尔值 |
Date | datetime.date | 日期类型 |
Time | datetime.time | 时间类型 |
DateTime | datetime.datetime | 日期和时间类型 |
- OPTIONS 列选项
选项名 | 说明 |
---|---|
autoincrement | 如果设置为True表示该列自增长 |
primary_key | 如果设置为True表示该列为主键 |
unique | 如果设置为True表示该列值唯一 |
index | 如果设置为True表示该列加索引 |
nullable | 如果设置为True表示该列可为空 |
default | 指定该列的默认值 |
注:如果列的类型是整数并且是主键,则默认自增长
如果一个列中要包含多个列选项,使用 ‘,’ 隔开即可
列选项 与 列类型之间使用 ‘,’ 隔开的
2. 数据库迁移
安装:flask-script
安装:flask-migrate
from flask_script import Manager
from flask_migrate import Migrate,MigrateCommand
#创建Manager对象管理flask应用
manager = Manager(app)
#创建Migrate对象并关联app和db
migrate = Migrate(app,db)
#为manager添加执行数据库数据库迁移命令
manager.add_command("db",MigrateCommand)
终端执行: