Flask-SQLAlchemy数据库操作

2016/05/24 Flask 阅读次数:

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>]

  1. 查询所有用户数据
    User.query.all()
    
  2. 查询有多少个用户
User.query.count()

  1. 查询第1个用户
User.query.first()
  1. 查询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_等语法

  1. 查询名字结尾字符为g的所有数据[开始/包含]
User.query.filter(User.name.endswith('g')).all()
  1. 查询名字不等于wang的所有数据[2种方式]
from sqlalchemy import not_
User.query.filter(not_(User.name=='wang')).all()
User.query.filter(User.name!='wang').all()

  1. 查询名字和邮箱都以 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()

  1. 查询password是 123456 或者 emailitheima.com 结尾的所有数据
from sqlalchemy import or_
User.query.filter(or_(User.password=='123456', User.email.endswith('itheima.com'))).all()
  1. 查询id为 [1, 3, 5, 7, 9] 的用户列表
User.query.filter(User.id.in_([1, 3, 5, 7, 9])).all()
  1. 查询name为liu的角色数据 关系引用
User.query.filter_by(name='liu').first().role.name

  1. 查询所有用户数据,并以邮箱排序 排序
User.query.order_by('email').all()
  1. 查询第2页的数据, 每页只显示3条数据
help(User.query.paginate)
三个参数: 1. 当前要查询的页数 2. 每页的数量 3. 是否要返回错误

pages = User.query.paginate(2, 3, False)
pages.items # 获取查询的结果
pages.pages # 总页数
pages.page # 当前页数

Search

    Table of Contents