码迷,mamicode.com
首页 > 其他好文 > 详细

Flask之模型字段解析与OA建模实训

时间:2021-06-13 10:49:14      阅读:0      评论:0      收藏:0      [点我收藏+]

标签:commit   bsp   注释   status   wrap   string   false   data   username   

 flask常用的模型字段和参数

常用的字段类型表

字段说明

映射到数据库对应类型

Integer

整数

int类型

String

字符串,String类内可选择length参数的值用于设置最大字符个数

varchar类型

Text

用于储存较长的Unicode文本,,理论上可以储存65535个字节

text类型

Date

日期,存储Pythondatetime.date 对象

date类型

Time

时间,存储Pythondatetime.time 对象

time类型

DateTime

时间和日期,存储Python 的datetime 对象

datetime类型

Float

浮点类型

float类型

Double

双精度浮点类型,比浮点类型小数位精度更高。

double类型,占据64位。

Boolean

布尔值

tinyint类型

Enum

枚举类型

enum类型

DECIMAL

保存固定精度的数据,DECIMAL(长度, 小数的位数)

decimal类型

Column常用参数表

约束

说明

primary_key

如果设为True,该列就是表的主键

unique

如果设为True,该列每个值唯一,也就是该字段不允许出现重复值

index

如果设为True,为这列创建索引,用于提升查询效率

nullable

如果设为True,这列允许使用空值,反之则不允许使用空值。

server_default

为这列定义默认值, 会映射到表结构,默认值只支持字符串,其他类型需要db.text()方法指定

default

为这列定义默认值,但是该约束并不会真正映射到表结构中,该约束只会在ORM层面实现

comment

该字段的注释

name

可以使用该参数直接指定字段名

autoincrement

设置这个字段为自动增长的。

server_default常用配置

配置默认值类型代码
更新datatime时间 server_default = db.text("CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP")
当前的datatime时间 server_default = db.text("CURRENT_TIMESTAMP")
字符 server_default=‘字符‘
数字 server_default=db.text(‘数字‘) 

常用关系选项

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

其中Flask中如下两个字段的默认值区分

create_time1 = db.Column(db.DateTime, default=datetime.now)

create_time2 = db.Column(db.DateTime, default=datetime.now())

两者的区别:

第一个插入的是当前时间,每条数据插入时可自动根据当前时间生成

第二条是一个固定的时间, 程序部署的时间,所有的数据都是这个固定时间。

onupdate参数--->记录每次修改的时间

update_time = db.Column(db.DateTime, default=datetime.now,onupdate=datetime.now)

OA模型之训练

from OAPro import db
from datetime import datetime

class BaseModel(db.Model):
    """模型基类"""
    __abstract__ = True
    id = db.Column(db.Integer, primary_key=True, autoincrement=True)

    def save(self):
        session = db.session()
        session.add(self)
        session.commit()

    def delete(self):
        session = db.session()
        session.delete(self)
        session.commit()

    def update(self):
        session = db.session()
        session.commit()

class Department(BaseModel):
    """部门表"""
    __tablename__ = ‘department‘
    dep_name = db.Column(db.String(32),unique=True)
    dep_description = db.Column(db.Text)
    d_e = db.relationship(‘Employee‘, backref=‘e_d‘)
    d_p = db.relationship(‘Position‘, backref=‘p_d‘)

class Position(BaseModel):
    """职位表"""
    __tablename__ = ‘position‘
    p_name = db.Column(db.String(32))
    level = db.Column(db.String(6))  # 职级
    description = db.Column(db.Text)  # 描述
    p_department = db.Column(db.Integer, db.ForeignKey(‘department.id‘),comment=‘职位的部门‘)
    p_e = db.relationship(‘Employee‘, backref=‘e_p‘)
    p_power = db.relationship(‘Power‘,backref = ‘power_p‘,secondary=‘position_power‘)

class Account(BaseModel):
    """账户表"""
    __tablename__=‘account‘
    username = db.Column(db.String(32),unique=True)
    password = db.Column(db.String(16) ,nullable=False)
    is_activate = db.Column(db.SmallInteger, server_default=db.text(‘0‘))  # 是否激活


class Employee(BaseModel):
    """职员表"""
    __tablename__ = ‘employee‘
    name = db.Column(db.String(32))
    gender = db.Column(db.String(4))
    age = db.Column(db.SmallInteger)
    nation = db.Column(db.String(16))
    education = db.Column(db.String(16))
    phone = db.Column(db.String(11))
    email = db.Column(db.String(32))
    photo = db.Column(db.String(32))
    join_time = db.Column(db.DATE)  # 入职时间
    emp_position = db.Column(db.Integer, db.ForeignKey(‘position.id‘))
    emp_department = db.Column(db.Integer, db.ForeignKey(‘department.id‘))
    account_id = db.Column(db.Integer, db.ForeignKey(‘account.id‘))
    e_n = db.relationship(‘Notice‘, backref=‘n_e‘)
    e_s = db.relationship(‘Salary‘, backref=‘s_e‘)
    e_l = db.relationship(‘Leave‘, backref=‘l_e‘)
    e_a = db.relationship(‘Account‘, backref=‘a_e‘, uselist=False) #一对一反向关系映射
    e_power=db.relationship(‘Power‘,backref=‘power_e‘,secondary=‘employee_power‘)

class Notice(BaseModel):
    """通告表"""
    __tablename__ = ‘notice‘
    title = db.Column(db.String(60),comment=‘标题‘)
    notice_type = db.Column(db.String(32))  # 通告的类型
    public_time = db.Column(db.DateTime,comment=‘发布时间‘,default=datetime.now)
    content = db.Column(db.Text)
    publisher = db.Column(db.Integer, db.ForeignKey(‘employee.id‘),comment=‘发布人‘)

class Leave(BaseModel):
    """假条表"""
    __tablename__ = ‘leave‘
    check_person = db.Column(db.String(32))  # 审核人
    check_person_id = db.Column(db.Integer)  # 审核人的id
    leave_time = db.Column(db.Date)  # 请假时间
    leave_type = db.Column(db.String(32))  # 请假类型
    leave_cause = db.Column(db.String(255))  # 请假原因
    leave_long = db.Column(db.SmallInteger)  # 请假时长
    leave_status = db.Column(db.String(16))  # 请假状态
    leave_employee = db.Column(db.Integer, db.ForeignKey(‘employee.id‘))  # 请假的员工

class Power(BaseModel):
    """权限表"""
    __tablename__ = ‘power‘
    power_name = db.Column(db.String(32))  # 权限名称
    power_obj = db.Column(db.String(32))  # 权限对象
    power_description = db.Column(db.Text)  # 权限描述

class Salary(BaseModel):
    """工资表"""
    __tablename__ = ‘salary‘
    give_time = db.Column(db.Date)  # 发放时间
    actual_amount = db.Column(db.DECIMAL(10,2))  # 实发金额
    welfare_deduction = db.Column(db.DECIMAL(10,2))   # 福利扣除
    tax_deduction = db.Column(db.DECIMAL(10,2))   # 个税扣除
    disc_deduction = db.Column(db.DECIMAL(10,2))   # 违纪扣除
    total = db.Column(db.DECIMAL(10,2))   # 总金额
    subsidy = db.Column(db.DECIMAL(10,2))   # 补助
    awards = db.Column(db.DECIMAL(10,2))  # 年终奖
    employee_id = db.Column(db.Integer, db.ForeignKey(‘employee.id‘))

# 职位权限关系表
position_power = db.Table(
    ‘position_power‘,#关系表名
    db.Column(‘position_id‘,db.Integer, db.ForeignKey(‘position.id‘)),
    db.Column(‘power_id‘,db.Integer, db.ForeignKey(‘power.id‘))
)

#员工权限关系表
employee_power = db.Table(
    ‘employee_power‘,#关系表名
    db.Column(‘employee_id‘,db.Integer,db.ForeignKey(‘employee.id‘)),
    db.Column(‘power_id‘,db.Integer,db.ForeignKey(‘power.id‘))
)

Flask之模型字段解析与OA建模实训

标签:commit   bsp   注释   status   wrap   string   false   data   username   

原文地址:https://www.cnblogs.com/Liu928011/p/14879121.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!