特点总结:
类名称---->数据库表名
类属性---->数据库字段
类的对象----->数据库表中的一行一行数据
3.ORM操作注意(理解)
1/因为SQLALChemy
去app身上读取了配置信息,所以需要设置到app.config身上
2/数据库的链接信息
如果安装的是flask_mysqldb,那么连接信息:
mysql://root(用户名):mysql(密码)@127.0.0.1(ip地址):3306(端口号)/data36(数据库名字)
如果安装的是flask_pymysql,那么连接信息:
mysql+pymysql://root(用户名):mysql(密码)@127.0.0.1(IP地址):3306(端口号)/data36(数据库名字)
3/编写的模型类必须继承自db.Model才能被映射
4/如果不指定表名称,默认生成的就是模型类的小写,如果需要自己指定表名称使用__tablename__="表名称"
5/删除继承自db.Model的表db.drop_all()
6/ORM在进行映射的时候不能生成数据库的,我们需要在数据库中建立相对应的数据库.然后再进行ORM操作.
4.1增删改
全部都是使用db.session
操作
常见方法:
db.session.add(obj)
添加单个对象
db.session.delete(obj)
删除单个对象
db.session.add_all([obj1,obj2])
增加多个对象
db.session.commit()
提交会话
db.drop_all()
删除继承自db.Model的所有表
db.create_all()
创建继承自db.Model的所有表
对象.属性 = 值
修改数据
其他:
db.session.rollback()
回滚
db.session.remove()
移除会话
查询语句:特点:模型.query
查询所有用户数据User.query.all()
查询有多少个用户User.query.count()
查询第1个用户User.query.all()[0]
User.query.filter(not_(User.name == 'wang')).all()
User.query.filter(or_(User.password == '123456',User.email.endswith('itheima.com'))).all()
User.query.filter(User.id.in_([1,3,5,7,9])).all()
查询所有用户数据,并以邮箱排序User.query.order_by(User.email).all()User.query.order_by(User.email.desc()).all()
每页3个,查询第2页的数据paginate = User.query.paginate(page, per_page,Error_out)paginate = User.query.paginate(2,3,False)page
: 哪一个页per_page
: 每页多少条数据Error_out
: False 查不到不报错
paginate(page,per_page,Error_out)
page表示要查询的页数,per_page表示每页有多少条数据,Error_out建议写成False,查不到不会报错
paginate.pages
总页数
paginate.page
当前页
paginate.items
当前页数所有的对象
8.数据库懒查询lazy(了解)
解释:一旦使用了relationship和backref,那么系统会自动做子查询
子查询(subquery):查询了一方,就会自动的将关联的一方查询出来
动态查询(dynamic):只有用到了才去查询(得到一个结果集,只有你去获取才能得到)
lazy的使用:
users=db.relationship('多方的模型类',backref="role(自己随意命名)",lazy='dynamic')
session指定存储位置(理解)
定义:用来存储敏感信息,存储在服务器内部
设置:session[key]=value
获取:value=session.get(get)
注意点:设置SECRET_KET
指定session存储到redis中
操作流程
1/安装flask_sess
pip install flas_session
2/导入Session;类
from flask_session import Session
3/设置session相关的配置信息到app中
4/读取app身上的配置信息(和session相关的)
Session(app)
<设置app的配置信息>
app.config["SESSION_TYPE"]="redis"
指定session的存储类型
app.config["SESSION_REDIS"]=StrictRedis()
指定redis服务器地址
app.config["SESSION_USE_SIGNER"]=True
设置session的签名信息
app.config["PERMANENT_SESSION_LIFETIME"]=timedelta(seconds=10)
设置session在redis中的存储时间
session默认有效期是31天
expires
有效期
g对象在一次请求中的所有的代码的地方,都是可以使用的