Flask

通过 flask-migrate 发号施令给flask-sqlalchemy 来 影响映射

python flask-sqlalchemy MYSQL
CLASS类 通过flask-sqlalchemy映射
db.Column() 来映射 表中的列
class类对象 通过flask-sqlalchemy映射 表中的一条记录
db.Integer 两边不同语言的代码相同的作用 int
db.String(15) varchar(15)
db.Datetime datetime

class User(db.Model): ------------> 映射的就是一张 user的表

注意事项:

1 要在app.py 中导入xxxmodel.py

2 flask db init - - - - -》 会产生一个migrations版本文件夹

flask db migrate --------> 在migrations文件夹的version里面产生一个版本py文件

falsk db upgrade - -- -> 利用版本py文件和映射关系 在数据库里创建表

数据库查询

python 后端 操作数据库 和 数据库本身操作代码对比:

python 复制代码
users= User.query.all()   # select * from user;

user = User.query.filter_by(username=username) # select * from user where username='xxx';
id username password phone
1 zhangsan 111 23
2 zhangsan 222 33
3 lisi 333 44

上述列表 经过 user_list = User.query.filter_by(username=zhangsan) 代码后

得到的仍然是一个列表

id username password phone
1 zhangsan 111 23
2 zhangsan 222 33

小结:

查询所有: 模型类.query.all() ~ select * from user;

有条件查询: 模型类.query.filter_by(字段名 = 值) ~ select * from user where 字段=值;

MYSQL根据条件查找:

select * from user where age>17 and gender='男';

select * from user where username like 'zhang%';

select * from user where rdatetime> xxx and rdatetime < xxx;

user = User.query.get(2) #根据主键查询用户,返回值是对象

PYTHON根据条件查找:

.filter_by()内部是 字段=值得模式

.filter() 是==的布尔模式 .filter(模型名.字段名>18)

user_list = User.query.filter(User.username == 'zhangsan') #返回的是一串对应关系的语句

例如: SELECT user.id AS user_id, user.username AS user_username, user.password AS user_password, user.phone AS user_phone, user.isdelete AS user_isdelete, user.rdatetime AS

user_rdatetime. FROM user Where user.username = %(username_1)s

user = User.query.filter(User.username == 'zhangsan').first() # 返回的是第一个对象

zhangsan

user = User.query.filter(User.username == 'zhangsan').all() # 返回的是所有符合条件的列表[<User 3>]

user_list = User.query.filter(User.username.startswith('z')).all()

select * from user where username like 'z%';

python 复制代码
{
  
  { users | length }}     # 3
 
{
  
  { users }}    #  [<User 1>,<User 4>,<User 5>]
筛选
not_ and_ or_ lt gt > < != .filter() .contains() .endswith() .startswith() .like(%)
python 复制代码
user_list = User.query.filter(User.username.endswith(z)).all()

# select * from user where username like '%z';

user_list = User.query.filter(User.username.contains('z')).all()

# select * from user where username like '%z%';

user_list = User.query.filter(User.username.like('%沐浴露%')).all  

#select * from user where username like '%沐浴露%';

#like 使用 一定要加% 才可以
user_list = User.query.filter(User.username.ilike('沐浴露')).all  #ilike 忽略大小写  



#  多条件查询    or_  and  
user_list = User.query.filter(or_(User.username.endswith(z),User.username.contains('i'))).all()

# or_       ...., 逗号 后面是另一个条件
# select * from user where username like 'z%' or username like '%i%';

user_list = User.query.filter(and_(User.username.contains('i'),User.rdatetime < '2025-05-25 10:20:50')).all()
# select * from user where rdatetime <'2025-05-25 10:20:50';
# select * from user where username like '%i%' and rdatetime <'2025-05-25 10:20:50';

user_list = User.query.filter(and_(User.username.contains('i'),User.rdatetime.__lt__('2025-05-25 10:20:50') )).all()
# .__lt__()   和  <  一个效果 都是 小于的意思 

#补充: __gt__ 大于    __lt__ 小于   __ge__  大于等于   __le__ 小于等于    ---》通常应用在某个范围(整型、日期) 也可以使用>  < >= <=  !=  
from sqlalchermy import and_, or_ not_

user_list = User.query.filter(not_(User.username.containes('i'))).all()



#从 18 19 20 17 21 22 ....选择
#select * from user where age in [17,18, 20];

User.age.between(15, 30)


user_list = User.query.filter(User.phone.in_(['13844940855','13844940844'])).all()
#找出这俩号的人儿
.order_by 排序

user_list = User.query.filter(User.username.contains('z')).order_by('rdatetime').all()

user_list = User.query.filter(User.username.contains('z')).order_by(-User.rdatetime).all() #倒序

user_list = User.query.filter(User.username.contains('z')).order_by('-rdatetime').all() #报错

user_list = User.query.order_by(-User.id).all() # 倒序排序

如果想倒序排序 .order_by(-模型类.字段)

limit 限制 和 offset
python 复制代码
user = User.query.order_by('id').limit(2)  #报错

{
  
  {user | length}}  #报错

TypeError: object of type 'BaseQuery' has no len()
# 返回的不是列表

比如说 表中 有 1 2 3 4 四个对象

user_list = User.query.order_by('id').limit(2).all() # 返回的是列表 [<user 1>,< user 2>] 默认获取前两个

user_list = User.query.offset(2).limit(2).all() #返回的是列表 [<user 3>,< user 4>] 跳过2条再获取2条

#offset 是一个偏移 即 偏移两个 再拿2个

相关推荐
上进小菜猪4 小时前
基于 YOLOv8 的昆虫智能识别工程实践 [目标检测完整源码]
后端
superman超哥4 小时前
Rust 异步递归的解决方案
开发语言·后端·rust·编程语言·rust异步递归
毕设源码-郭学长4 小时前
【开题答辩全过程】以 基于python电商商城系统为例,包含答辩的问题和答案
开发语言·python
black0moonlight4 小时前
win11 isaacsim 5.1.0 和lab配置
python
知乎的哥廷根数学学派4 小时前
基于多尺度注意力机制融合连续小波变换与原型网络的滚动轴承小样本故障诊断方法(Pytorch)
网络·人工智能·pytorch·python·深度学习·算法·机器学习
网安CILLE4 小时前
PHP四大输出语句
linux·开发语言·python·web安全·网络安全·系统安全·php
jjjddfvv4 小时前
超级简单启动llamafactory!
windows·python·深度学习·神经网络·微调·audiolm·llamafactory
A先生的AI之旅4 小时前
2025顶会TimeDRT快速解读
人工智能·pytorch·python·深度学习·机器学习
程序员小远4 小时前
完整的项目测试方案流程
自动化测试·软件测试·python·功能测试·测试工具·职场和发展·测试用例