一、flask数据库——添加数据
创建一张数据表,作为实例操作:
class Person(db.Model):
"""员工表"""
# primary_key:主键 autoincrement:自增长
id = db.Column(db.Integer, primary_key=True, autoincrement=True)
# 登录名 unique:唯一
username = db.Column(db.String(32), unique=True)
# 密码
password = db.Column(db.String(32))
# 姓名 default:默认值
nickname = db.Column(db.String(32), default="")
# 年龄
age = db.Column(db.Integer, default=18)
# 性别
gender = db.Column(db.String(16), default="男")
# 绩效 nullable:值可以为空
score = db.Column(db.Float, nullable=True)
(一)增加一条数据
只增加一行数据,执行代码:
person1 = Person(
username = "xiaobai",
password = "123456",
nickname = "小白",
age = 18,
gender = "男",
score = 96.5
)
db.session.add(person1)
db.session.commit()
(二)增加多条数据
增加多条数据 只是 在增加一条数据的基础上复制,代码基本一致,数据不一样
person1 = Person(
username = "xiaobai",
password = "123456",
nickname = "小白",
age = 18,
gender = "男",
score = 96.5
)
person2 = Person(
username = "xiaobai",
password = "123456",
nickname = "小白",
age = 18,
gender = "男",
score = 96.5
)
db.session.add_all([person1,person2])
db.session.commit()
(三)增加一批数据
如果项目需要增加大量的数据,增加多条数据的方式显然不适用,当然,也有解决办法,示例代码如下:
- 编写数据
first_name = """
昊扬 韩昆晏 韩秋香 韩雷松 韩中成 韩巧莲 韩祖成 韩海灵
韩小庆 韩海铭 韩铭海 韩松汝 韩子伊 韩子海 韩金羽 韩志盈
韩鱼羽 韩高羽 韩韭羽 韩青羽 韩足羽 韩伍羽 韩五羽 韩待羽
韩劲羽 韩少杰 韩海铃 韩鸣宇 韩鸣轩 韩学菘 韩雪颂 韩雪菘
韩雪淞 韩雪凇 韩学嵩 韩正东 韩克奇 韩文龙
""".replace("\n", "").replace(" ", "").replace(" ", "").split("韩") # replace:替代 split:分裂
- 整理、添加数据
for i in first_name:
for j in last_name:
nick_name = j+i
username = "".join(pypinyin.lazy_pinyin(nick_name))
# 随机6位100000~999999数字位密码
password = random.randint(100000, 999999)
# 随机年龄16~24岁
age = random.randint(16, 24)
# 随机性别
gender = random.choice(["男", "女"])
# 随机30~100的绩效
score = random.randint(30, 100)
person = Person(
username=username,
password=password,
nickname=nick_name,
age=age,
gender=gender,
score=score
)
db.session.add(person)
db.session.commit()
二、flask数据库——查询数据
查看所有员工姓名、性别、年龄
# 查看所有员工姓名、性别、年龄
person_list = Person.query.all()
for person in person_list:
print(person.nickname, person.gender, person.age)
查看当 id 是某个值时的数据
# 查看id为168的员工
person = Person.query.get(168)
print(person)
print(person.username)
print(person.nickname)
结果如下:
<Persion 168>
xuzucheng
许祖成
1、模糊查询
filter:适合比较复杂的查询
例如:比较,模糊,聚类
filter_by:适合简单的,安照字段进行固定值的查询
例如:性别为男姓的限制查询
例1:查看所有男性,显示姓名、性别、年龄
关键词:filter_by
# 查看所有男性
person_list = Person.query.filter_by(gender="男")
for person in persion_list:
print(person.nickname, person.gender, person.age)
例2:从第26个开始,查询10位年龄大于20岁的男性
limit:限制返回条数
offset:查询的起始位置
关键词:filter、limit、offset
#从第26个开始,查询10位年龄大于20岁的男同事
persion_list = Persion.query.filter(
Persion.age > 20,
Persion.gender=="男"
# 从第26个开始,查询10个
).limit(10).offset(26)
for person in person_list:
print(person.nickname, person.age, person.gender)
2、排序查询
按照指定顺序查询数据
例1:按照年龄从小到大排序,查询所有李姓的女性
# 按照年龄排序,查询所有李姓的女性
person_list = Person.query.filter(
Person.gender == "女",
Person.nickname.like("李%")
).order_by(Person.age) #从小到大排序
for person in person_list:
print(person.nickname,person.age,person.gender)
例1:按照年龄从大到小排序,查询所有李姓的女性
# 按照年龄排序,查询所有李姓的女性
person_list2 = Person.query.filter(
Person.gender == "女",
Person.nickname.like("李%")
).order_by(Person.age.desc()) #从大到小排序
for person in person_list2:
print(person.nickname,person.age,person.gender)
3、聚合查询
聚合查询常用:Max、Min、count、sum、avg
# 需要用到func模块
from sqlalchemy import func
# 查询所有吴姓男生的个数
result = db.sesson.query(
func.count(Person.id)
).filter(Person.gender == "男",Person.nickname.like("吴%")).all()
print(result)
4、分组查询
group_by:分组
#分组查询
from sqlalchemy import func
#分别查询男姓、女性的数量
result = db.session.query(
Person.gender,
func.count(Person.id)
).group_by(Person.gender).all()
print(result)
#查询年龄个数
result = db.session.query(
Person.age,
func.count(Person.id)
).group_by(Person.age).all()
print(result)
执行结果:
5、逻辑查询
逻辑:and or not
执行代码引入:
from sqlalchemy import and_
from sqlalchemy import or_
from sqlalchemy import not_
例:查询所有吴姓同事或者男同事
代码如下:
from sqlalchemy import or_
#查询所有吴姓同事或者男同事
person_list = Person.query.filter(
or_(
Person.gender=="男",
Person.nickname.like("吴%")
)
)
for person in person_list:
print(person.nickname,person.age,person.gender)