Flask增删改查
导入所有代码
In [1]: from demo3_SQLAlchemy import *
添加数据
In [2]: role = Role(name='admin')
In [3]: db.session.add(role)
In [4]: db.session.commit()
回滚添加,回滚在提交之前. 一般都是执行数据库命名出错了, 然后回滚
In [6]: users = User(name='zhangsan')
In [7]: db.session.add(users) #提交的数据有误, 需要回滚
In [8]: db.session.rollback()
In [9]: users.role_id = role.id # 回滚后修改模型数据
In [10]: db.session.commit() # 回滚后直接提交时无法成功的
In [11]: db.session.add(users) # 需要再次add并commit
In [12]: db.session.commit()
修改数据
In [13]: users.name = 'zhubo'
In [14]: db.session.commit()
删除数据
In [16]: db.session.delete(users)
In [17]: db.session.commit()
先退出ipython, 然后重新运行 –> 重新创表 否则: ipython没有关闭数据库, 仍然保持连接.
In [1]: from demo3_SQLAlchemy import *
添加角色
In [2]: role = Role(name='admin')
In [3]: db.session.add(role)
In [5]: db.session.commit()
添加2个用户
In [6]: user1 = User(name='zs', role_id=role.id)
In [7]: user2 = User(name='ls', role_id=role.id)
In [8]: db.session.add_all([user1, user2])
In [9]: db.session.commit()
关系引用的用法
In [10]: user1.role
Out[10]: <Role: admin 1>
In [13]: user1.role.name
Out[13]: u'admin'
In [14]: role.users
Out[14]: [<User: zs 1 None None>, <User: ls 2 None None>]
- 查询所有用户数据
User.query.all()
- 查询有多少个用户
User.query.count()
- 查询第1个用户
User.query.first()
- 查询id为4的用户[3种方式]
User.query.get(4)
User.query.filter_by(id=4).first()
User.query.filter(User.id==4).first()
filter:(对象.属性名==)
filter_by:(属性名=)
filter_by: 用于查询简单的列名,不支持比较运算符
filter比filter_by的功能更强大,支持比较运算符,支持or_、in_等语法。
- 查询名字结尾字符为g的所有数据[开始/包含]
User.query.filter(User.name.endswith('g')).all()
- 查询名字不等于wang的所有数据[2种方式]
from sqlalchemy import not_
User.query.filter(not_(User.name=='wang')).all()
User.query.filter(User.name!='wang').all()
- 查询名字和邮箱都以 li 开头的所有数据[2种方式]
from sqlalchemy import and_
User.query.filter(and_(User.name.startswith('li'), User.email.startswith('li'))).all()
User.query.filter(User.name.startswith('li'), User.email.startswith('li')).all()
- 查询password是
123456
或者email
以itheima.com
结尾的所有数据
from sqlalchemy import or_
User.query.filter(or_(User.password=='123456', User.email.endswith('itheima.com'))).all()
- 查询id为 [1, 3, 5, 7, 9] 的用户列表
User.query.filter(User.id.in_([1, 3, 5, 7, 9])).all()
- 查询name为liu的角色数据 关系引用
User.query.filter_by(name='liu').first().role.name
- 查询所有用户数据,并以邮箱排序 排序
User.query.order_by('email').all()
- 查询第2页的数据, 每页只显示3条数据
help(User.query.paginate)
三个参数: 1. 当前要查询的页数 2. 每页的数量 3. 是否要返回错误
pages = User.query.paginate(2, 3, False)
pages.items # 获取查询的结果
pages.pages # 总页数
pages.page # 当前页数