一 . Flask数据库搭建
(一)创建app.py文件
import os
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(name)
base_dir = os.path.dirname( #返回指定文件的目录
os.path.abspath(file)
#__file__指当前文件 abspath是绝对路径
)
app.config[“SQLALCHEMY_DATABASE_URI”] = “sqlite:///”+os.path.join(base_dir,“OA.sqlite”)
app.config[“SQLALCHEMY_TRACK_MODIFICATIONS”] = True
db = SQLAlchemy(app)
创建一个OA.sqlite文件
(二)创建models.py文件
class Persion(db.Model):
id = db.Column(db.Integer,primary_key=True,autoincrement=True)
username = db.Column(db.String(32),unique=True)
password = db.Column(db.String(32))
nickname = db.Column(db.String(32),default="")
age = db.Column(db.Integer)
gender = db.Column(db.String(16),default=“男”)
score = db.Column(db.FLOAT,nullable=True)
创建数据库
#primary_key 主键
#autoincrement 自增长
#unique 唯一
#default 默认值
#nullable 值可以为null
(三)创建views.py视图文件 , main.py启动文件
二. Flask数据库操作
(一)常规操作
- 增
#单个插入
persion = Persion(
username = “wukong”,
password = “123456”,
nickname = “悟空”,
age = 18,
gender = “男”,
score = 92.5
)
db.session.add(persion)
db.session.commit()
#多个插入
persion1 = Persion(
username = “dawa”,
password = “123456”,
nickname = “大娃”,
age = 18,
gender = “男”,
score = 92.5
)
persion2 = Persion(
username = “erwa”,
password = “123456”,
nickname = “二娃”,
age = 18,
gender = “男”,
score = 91.5
)
db.session.add_all([persion1,persion2])
db.session.commit()
- 查
创建一个存有大量员工数据信息的数据库
#查id为288的员工
persion = Persion.query.get(288) #自动查询id为288的员工
print(persion)
print(persion.username)
print(persion.nickname)
#查看所有的员工
persion_list = Persion.query.all()
for persion in persion_list:
print(persion.nickname,persion.gender)
#查所有男生
persion_list = Persion.query.filter_by(gender = “男”)
for persion in persion_list:
print(persion.nickname,persion.age,persion.gender)
#查所有年龄大于21岁的男同事
persion_list = Persion.query.filter(Persion.age >21,Persion.gender==“男”)
for persion in persion_list:
print(persion.nickname,persion.age,persion.gender)
#从第二十个开始,查询10位年龄大于21岁的男同事
persion_list = Persion.query.filter(
Persion.age > 21,
Persion.gender==“男”
).limit(10).offset(20)
for persion in persion_list:
print(persion.nickname,persion.age,persion.gender)
#聚合查询
Max Min count sum avg
#查询所有男生的个数
from sqlalchemy import func
#查询所有吴姓男生的个数
result = db.session.query(
func.count(Persion.id)
).filter(Persion.gender == “男”,Persion.nickname.like(“吴%”)).all()
print(result)
#分组查询
#from sqlalchemy import func
##查询男女个数
#result = db.session.query(
Persion.gender,
func.count(Persion.id)
).group_by(Persion.gender).all()
print(result)
#查询年龄个数
result = db.session.query(
Persion.age,
func.count(Persion.id)
).group_by(Persion.age).all()
print(result)
from sqlalchemy import and_
from sqlalchemy import or_
from sqlalchemy import not_
#查询所有吴姓男生
persion_list = Persion.query.filter(
Persion.gender==“男”,
Persion.nickname.like(“吴%”)
)
for persion in persion_list:
print(persion.nickname,persion.age,persion.gender)
#查询所有吴姓同事或者男同事
persion_list = Persion.query.filter(
or_(
Persion.gender==“男”,
Persion.nickname.like(“吴%”)
)
)
for persion in persion_list:
print(persion.nickname,persion.age,persion.gender)
3)改
class Base(db.Model):
abstract = True #作为父类完成被继承,本身不执行
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
def save(self):
db.session.add(self)
db.session.commit()
def delete(self):
db.session.delete(self)
db.session.commit()
def update(self):
db.session.commit()
pos_per = db.Table(
“pos_per”, #表名
db.Column(“pos_id”,db.Integer,db.ForeignKey(“position.id”)),
db.Column(“per_id”, db.Integer, db.ForeignKey(“permission.id”)),
) #中间表必须这样创建
class Position(Base):
#职位表
p_name = db.Column(db.String(32))
p_level = db.Column(db.Integer)
p_permission = db.relationship(
“Permission”, #映射表
secondary = pos_per,#中间表
backref = “p_position” #反向映射字段
)
class Permission(Base):
#权限表
per_name = db.Column(db.String(256))
#插入权限
p_list = [
“查看部门考勤”,
“组织部门会议”,
“招聘员工”,
“开除员工”]
for per in p_list:
p = Permission()
p.per_name = per
p.save()
#插入主任职位
p = Position()
p.p_name = “主任”
p.p_level = 2
p.save()
#给主任添加权限
p = Position.query.get(1)
p.p_permission.append(
Permission.query.get(1) #1号权限
)
p.p_permission.append(
Permission.query.get(2) #2号权限
)
p.save()
#添加经理并添加3个权限
p = Position()
p.p_name = “经理”
p.p_level = 3
p.save()
for i in range(1,4):
p.p_permission.append(
Permission.query.get(i) #1号权限
)
p.save()
#查询权限对应的职位
#查询能够组织会议的职位
#拿到权限
permission = Permission.query.get(2)
print(permission.per_name)
#查看权限对应的所有职位
for position in permission.p_pp_nameosition:
print(position.p_name)
#查询职位对应的权限
#查看经理
position = Position.query.get(2)
print(position.p_name)
#查看经理权限
print(position.p_permission)
for permission in position.p_permission:
print(permission.per_name)
一对多关系
映射
class Position(Base):
p_name = db.Column(db.String(32))
p_level = db.Column(db.Integer)
p_persion = db.relationship(
"Persion", #映射的类对象
backref="our_position" #反向映射 给persion表使用的
)
#外键
class Persion(Base):
username = db.Column(db.String(32),unique = True) #登陆名
password = db.Column(db.String(32)) #密码
nickname = db.Column(db.String(32), default="") #姓名
age = db.Column(db.Integer, default=18) #年龄
gender = db.Column(db.String(16), default=“男”) #性别
score = db.Column(db.Float, nullable=True) #绩效
#声明p_position是一个外键整形字段,对应position表的id
p_position =db.Column(db.Integer,db.ForeignKey(“position.id”))
#映射的使用
#查询id 288的员工
persion = Persion.query.get(288)
print(persion.nickname)
print(persion.score)
print(persion.p_position) #输出职位的id
#得到当前员工职位的数据
print(persion.our_position)
print(
persion.nickname,
persion.our_position.p_name,
persion.our_position.p_level
)
#查询公司所有的小组长 2
#查询小组长职位
position = Position.query.get(2)
print(position.p_name)
#查看所有的小组长名字
persion_list = position.p_persion
for persion in persion_list:
print(persion.nickname)
4)删…待补全