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)
终端执行:
版权声明:本文为qq_36881091原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。