flask-sqlalchemy的配置、字段说明,表设计样例

一:配置参数
配置名备注
SQLALCHEMY_DATABASE_URI连接数据库URI
SQLALCHEMY_BINDS一个映射 binds 到连接 URI 的字典。更多 binds 的信息见用 Binds 操作多个数据库
SQLALCHEMY_ECHO如果设置为Ture, SQLAlchemy 会记录所有 发给 stderr 的语句,对调试有用
SQLALCHEMY_RECORD_QUERIES可以用于显式地禁用或启用查询记录。查询记录 在调试或测试模式自动启用。更多信息见get_debug_queries()
SQLALCHEMY_NATIVE_UNICODE可以用于显式禁用原生 unicode 支持。当使用 不合适的指定无编码的数据库默认值时,这对于 一些数据库适配器是必须的(比如 Ubuntu 上 某些版本的 PostgreSQL )
SQLALCHEMY_POOL_SIZE数据库连接池的大小。默认是引擎默认值(通常 是 5 )
SQLALCHEMY_POOL_TIMEOUT设定连接池的连接超时时间。默认是 10
SQLALCHEMY_POOL_RECYCLE多少秒后自动回收连接。这对 MySQL 是必要的, 它默认移除闲置多于 8 小时的连接。注意如果 使用了 MySQL , Flask-SQLALchemy 自动设定 这个值为 2 小时

二:ORM模型类参数说明
字段类型:
类型名python中的类型说明
Integerint普通整数,一般是32位
SmallIntegerint取值范围小的整数,一般是16位
BigInteger

int或long

不限制精度的整数
Floatfloat浮点数
Numeric

decimal.Decimal

普通整数,一般是32位
Stringstr变长字符串
Textstr变长字符串,对较长或不限长度的字符串做了优化
Unicodeunicode变长Unicode字符串
UnicodeTextunicode变长Unicode字符串,对较长或不限长度的字符串做了优化
Booleanbool布尔值
Date

datetime.date

时间
Time

datetime.datetime

日期和时间
LargeBinary

str

二进制文件

列选项:
选项名说明
primary_key如果为True,代表表的主键
unique如果为True,代表这列不允许出现重复的值
index如果为True,为这列创建索引,提高查询效率
nullable

如果为True,允许有空值,如果为False,不允许有空值

default

为这列定义默认值

关系选项:
选项名说明
backref

在关系的另一模型中添加反向引用

primaryjoin明确指定两个模型之间使用的联结条件
uselist如果为False,不使用列表,而使用标量值
order_by指定关系中记录的排序方式
secondary指定多对多关系中关系表的名字
secondary join在SQLAlchemy中无法自行决定时,指定多对多关系中的二级联结条件

参考文章:

Flask之SQLAlchemy的基本使用 - 掘金

备注:表设计样例
from applications import db
from datetime import datetime
from werkzeug.security import generate_password_hash, check_password_hash


class BaseModel:
    is_delete = db.Column(db.Integer, default=0, comment='是否删除(0未删除,1已删除)')
    create_time = db.Column(db.DateTime, default=datetime.now, comment='创建时间')
    update_time = db.Column(db.DateTime, default=datetime.now, onupdate=datetime.now, comment='修改时间')


class User(db.Model, BaseModel):
    __tablename__ = 'user'
    __table_args__ = {'comment': '用户表'}

    user_id = db.Column('user_id', db.Integer, primary_key=True, comment='用户ID')
    username = db.Column('username', db.String(12), comment='登录名', nullable=False)
    password = db.Column('password', db.String(225), comment='登录密码', nullable=False)
    user_email = db.Column('user_email', db.String(25), comment='用户邮箱')
    user_email_code = db.Column('user_email_code', db.Integer, comment='用户邮箱校验码')
    user_email_is_active = db.Column('user_email_is_active', db.Integer, comment='用户是否激活邮箱')
    user_state = db.Column('user_state', db.Integer, default=0, comment='用户状态(0启用,1禁用)')
    user_sex = db.Column('user_sex', db.Integer, default=0, comment='用户性别(0男,1女)')
    user_qq = db.Column('user_qq', db.String(25), comment='用户qq')
    user_tel = db.Column('user_tel', db.String(11), comment='用户电话')
    user_xueli = db.Column('user_xueli', db.String(25), comment='用户学历')
    user_hobby = db.Column('user_hobby', db.String(50), comment='用户爱好')
    user_introduce = db.Column('user_introduce', db.String(200), comment='用户介绍')
    # 关联到角色表
    role = db.relationship('Role', backref='user', lazy='dynamic')

    def set_password(self, password):
        self.password = generate_password_hash(password)

    def validate_password(self, password):
        return check_password_hash(self.password_hash, password)

    def to_dict(self):
        return {
            "id": self.user_id,
            "username": self.username,
            "mobile": self.user_tel,
            "email": self.user_email,
            "user_state": self.user_state,
            "is_delete": self.is_delete,
            "create_time":  self.create_time.strftime("%Y-%m-%d %H:%M:%S ")
        }


class Role(db.Model, BaseModel):
    __tablename__ = 'role'
    __table_args__ = {'comment': '角色表'}
    role_id = db.Column('role_id', db.Integer, primary_key=True, comment='角色ID')
    role_name = db.Column('role_name', db.String(12), unique=True, comment='角色名称')
    role_pers = db.Column('role_pers', db.String(122), comment='角色所拥有的权限')
    role_dec = db.Column('role_dec', db.String(122), comment='角色描述')

    user_id = db.Column('user_id', db.Integer, db.ForeignKey('user.user_id'))
    # 关联到权限表
    permission = db.relationship('Permission', backref='role', lazy='dynamic')


class Permission(db.Model, BaseModel):
    __tablename__ = 'permission'
    __table_args__ = {'comment': '权限表'}
    per_id = db.Column('per_id', db.Integer, primary_key=True, comment='权限ID')
    per_name = db.Column('per_name', db.String(12), comment='权限名称')
    per_pid = db.Column('per_pid', db.Integer, comment='权限父级ID')
    per_level = db.Column('per_level', db.Integer, comment='权限父级等级')
    per_path = db.Column('per_path', db.String(25), comment='权限路径')
    per_control = db.Column('per_control', db.String(12), comment='权限方法')
    role_id = db.Column('role_id', db.Integer, db.ForeignKey('role.role_id'), comment='角色ID')


class Menu(db.Model, BaseModel):
    __tablename__ = 'menu'
    __table_args__ = {'comment': '菜单表'}
    menu_id = db.Column('menu_id', db.Integer, primary_key=True, comment='菜单ID')
    menu_name = db.Column('menu_name', db.String(12), comment='菜单名称')
    menu_pid = db.Column('menu_pid', db.Integer, comment='菜单父级ID')
    menu_path = db.Column('menu_path', db.String(25), comment='菜单路径')
    menu_control = db.Column('menu_control', db.String(12), comment='菜单方法')
    menu_order = db.Column('menu_order', db.Integer, comment='菜单个数')

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值