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个

相关推荐
邹霍梁@开源软件GoodERP7 分钟前
《手札·数转篇》中小制造企业的信息化升级:MES系统的价值与应用
python·开源·制造
星星点点洲1 小时前
【SpringBoot实现全局API限频】 最佳实践
java·spring boot·后端
华梦岚1 小时前
F#语言的学习路线
开发语言·后端·golang
虾球xz1 小时前
游戏引擎学习第92天
python·学习·游戏引擎
lllsure1 小时前
【快速入门】SpringMVC
java·后端·spring·mvc
AuGuSt_812 小时前
【已解决】lxml.etree.ParserError: Document is empty
爬虫·python
九亿AI算法优化工作室&2 小时前
KOA优化最近邻分类预测matlab
人工智能·python·机器学习·matlab·分类·数据挖掘·回归
程序员东min2 小时前
Python:凯撒密码
python·算法
梅清瑶2 小时前
Powershell语言的数据库编程
开发语言·后端·golang
是十一月末2 小时前
深度学习之神经网络框架搭建及模型优化
人工智能·pytorch·python·深度学习·神经网络