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个

相关推荐
小雅痞2 分钟前
[Java][Leetcode middle] 80. 删除有序数组中的重复项 II
java·python·leetcode
бесплатно2 分钟前
Scala流程控制
开发语言·后端·scala
大叔_爱编程4 分钟前
p020基于Django的4S店客户管理系统
vue.js·python·django·毕业设计·源码·课程设计·4s店客户管理系统
爱吃烤鸡翅的酸菜鱼19 分钟前
Java【网络原理】(5)深入浅出HTTPS:状态码与SSL/TLS加密全解析
java·网络·后端·网络协议·http·https·ssl
yorushika_26 分钟前
python打卡训练营打卡记录day22
开发语言·python·机器学习
代码的乐趣32 分钟前
支持selenium的chrome driver更新到136.0.7103.92
chrome·python·selenium
带鱼工作室36 分钟前
通义读光系列文字检测+识别模型端到端OCR应用
python·opencv·计算机视觉·ocr
安特尼39 分钟前
招行数字金融挑战赛数据分析赛带赛题二
python·算法·机器学习·金融·数据分析
Tom Boom40 分钟前
14. 原生测试框架Unittest的skip、skipIf、skipUnless的使用
自动化测试·python·测试开发·unittest·自动化测试框架开发
小白爱编程HC1 小时前
用pymysql操作数据库
数据库·python·mysql