当前位置: 首页 > news >正文

爱唐山做贡献月评十佳投票网站上海 企业网站建设

爱唐山做贡献月评十佳投票网站,上海 企业网站建设,荣耀手机全部型号,广州市建设集团网站数据库基本操作 在Flask-SQLAlchemy中#xff0c;插入、修改、删除操作#xff0c;均由数据库会话管理。 会话用 db.session 表示。在准备把数据写入数据库前#xff0c;要先将数据添加到会话中然后调用db.session.commit()方法提交会话。 db.session.add#xff08;role插入、修改、删除操作均由数据库会话管理。 会话用 db.session 表示。在准备把数据写入数据库前要先将数据添加到会话中然后调用db.session.commit()方法提交会话。 db.session.addrole添加到数据库的session中db.session.add_all[user1user2]添加多个信息到session中db.session.commit提交数据库的修改包括增/删/改db.session.rollback数据库的回滚操作db.session.deleteuser删除数据库需跟上commit 在 Flask-SQLAlchemy 中查询操作是通过 query 对象操作数据。 最基本的查询是返回表中所有数据可以通过过滤器进行更精确的数据库查询。 一、在视图函数中定义模型类 from flask import Flask from flask_sqlalchemy import SQLAlchemyapp Flask(__name__)#设置连接数据库的URL app.config[SQLALCHEMY_DATABASE_URI] mysql://root:mysql127.0.0.1:3306/test #设置数据库追踪信息,压制警告 app.config[SQLALCHEMY_TRACK_MODIFICATIONS] True #创建SQLAlchemy对象,读取app中配置信息 db SQLAlchemy(app) #定义角色模型(一方) class Role(db.Model):# 定义表名__tablename__ roles# 定义列对象id db.Column(db.Integer, primary_keyTrue)name db.Column(db.String(64), uniqueTrue)#设置关系属性,方便查询使用us db.relationship(User, backrefrole)#重写__repr__方法,方便查看对象输出内容def __repr__(self):return Role:%s% self.name#定义用户模型类(多方) class User(db.Model):__tablename__ usersid db.Column(db.Integer, primary_keyTrue)name db.Column(db.String(64), uniqueTrue, indexTrue)email db.Column(db.String(64),uniqueTrue)password db.Column(db.String(64))role_id db.Column(db.Integer, db.ForeignKey(roles.id))def __repr__(self):return User:%s%self.name if __name__ __main__:#删除所有和db相关联的表db.drop_all()#创建所有和db相关联的表db.create_all()app.run(debugTrue)二、关键代码格式,说明 一对多关系 class Role(db.Model):...#关键代码us db.relationship(User, backrefrole, lazydynamic)...class User(db.Model):...role_id db.Column(db.Integer, db.ForeignKey(roles.id))其中realtionship描述了Role和User的关系。第一个参数为对应参照的类User第二个参数backref为类User,反向引用属性第三个参数lazy决定了什么时候SQLALchemy从数据库中加载数据 如果设置为子查询方式(subquery)则会在加载完Role对象后就立即加载与其关联的对象这样会让总查询数量减少但如果返回的条目数量很多就会比较慢 设置为 subquery 的话role.users 返回所有数据列表另外,也可以设置为动态方式(dynamic)这样关联对象会在被使用的时候再进行加载并且在返回前进行过滤如果返回的对象数很多或者未来会变得很多那最好采用这种方式 三、常见的操作语句 db.session.add(obj) 添加对象db.session.add_all([obj1,obj2,…]) 添加多个对象db.session.delete(obj) 删除对象db.session.commit() 提交会话db.session.rollback() 回滚db.session.remove() 移除会话 代码演示 往roles表中添加一条记录role;往users表中添加、修改、删除一条记录user from flask import Flask from flask_sqlalchemy import SQLAlchemyapp Flask(__name__)# 数据库链接地址 app.config[SQLALCHEMY_DATABASE_URI] mysql://root:root127.0.0.1/flask_sql_demo # 动态追踪修改设置如未设置只会提示警告,不建议开启未来版本中会移除 app.config[SQLALCHEMY_TRACK_MODIFICATIONS] Falsedb SQLAlchemy(app) 两张表 角色管理员/普通用户 用户角色ID # 数据库的模型需要继承db.Model # 角色表 class Role(db.Model):# 定义表名__tablename__ roles# 定义字段# db.Column表示是一个字段id db.Column(db.Integer,primary_keyTrue)name db.Column(db.String(16),uniqueTrue)# 用户表 class User(db.Model):# 定义表名__tablename__ users# 定义字段id db.Column(db.Integer, primary_keyTrue)name db.Column(db.String(16), uniqueTrue)# db.ForeignKey(roles.id)表示是外键需要传参数表名.字段名role_id db.Column(db.Integer,db.ForeignKey(roles.id))app.route(/)def index():return Hello flask!if __name__ __main__:# 删除表db.drop_all()# 创建表db.create_all()# 创建测试数据# 增加数据role Role(nameadmin)db.session.add(role)db.session.commit()user User(nameZep,role_idrole.id)db.session.add(user)db.session.commit()# 修改user这条记录时不需要再db.session.add(user)因为之前已经add过了直接commit即可user.name Zep03db.session.commit()# 删除user这条记录db.session.delete(user)db.session.commit()user User(nameZep, role_idrole.id)db.session.add(user)db.session.commit()app.run(debugTrue)运行结果 四、常用的SQLAlchemy查询过滤器 用来过滤数据,返回查询的结果集 通过filter_by列名值列名值的方法来查询数据 通过filter(类名.列名值 类名.列名值)的方法来查询数据 完整使用方法User.query.filter().offset().limit.order_by().all() offset表示“偏移”offset(2)表示跳过2条记录从第3条开始查 4. order_by(类名.列名.desc()):按照列名的降序排序 order_by(类名.列名.asc()):按照列名的升序排序默认就是按照升序 from sqlalchemy import func db.session.query(User.role_id,func.count(User.role_id)).group_by(User.role_id).all() 五、常用的SQLAlchemy查询执行器 用来执行结果集,得到具体数据 all()方法以列表的形式返回查询的所有结果列表中存放的是一个个对象一条条记录 通过first()和get()方法获取表中的某一条记录 注意get(主键的值)返回指定主键对应的行 3. 关联查询通过Role的对象来获取关联的字段的列表ro.users 4. 关联查询通过User的对象来获取role: 5. 显示信息 def repr(self): ‘’‘定义之后可以让显示对象的时候更加直观’’’ return “User object:name%s” %self.name 六、练习数据库查询操作 代码准备 from flask import Flask from flask_sqlalchemy import SQLAlchemyapp Flask(__name__)#配置信息 app.config[SQLALCHEMY_DATABASE_URI] mysqlpymysql://root:123456127.0.0.1:3306/basic8 #设置压制警告信息,如果True会追踪数据库变化,会增加显著开销,所以建议设置为False app.config[SQLALCHEMY_TRACK_MODIFICATIONS] False#创建SQLAlchemy类对象,关联app db SQLAlchemy(app)#编写模型类,继承db.Model #角色,用户之间的关系 class Role(db.Model):__tablename__ roles #指定表名称#参数1:表示整数类型, 参数2:表示主键id db.Column(db.Integer,primary_keyTrue)#角色名唯一的name db.Column(db.String(64),uniqueTrue)#需要设置关系属性relationship(不会产生字段),设置在一方#给Role添加了users关系属性, 查询格式: role.users#给User添加了role关系属性(反向引用),查询格式: user.roleusers db.relationship(User,backrefrole)#为了方便的看到对象输出的内容__repr__, 如果是普通类__str__def __repr__(self):return Role:%s%self.name# 用户(多方) class User(db.Model):__tablename__ users # 指定表名称#参数1:表示整数类型, 参数2:表示主键id db.Column(db.Integer,primary_keyTrue)#用户名唯一的name db.Column(db.String(64),uniqueTrue)#邮箱密码email db.Column(db.String(64),uniqueTrue)password db.Column(db.String(64))#外键role_id db.Column(db.Integer,db.ForeignKey(Role.id))#为了方便的看到对象输出的内容__repr__, 如果是普通类__str__def __repr__(self):return User:%s,%s,%s,%s%(self.id,self.name,self.email,self.password)if __name__ __main__:#为了演示方便,先删除数据库表,和模型类关联的表db.drop_all()#创建表,所有继承自dbModel的表db.create_all()#创建测试数据ro1 Role(nameadmin)db.session.add(ro1)db.session.commit()# 再次插入一条数据ro2 Role(nameuser)db.session.add(ro2)db.session.commit()#多条用户数据us1 User(namewang, emailwang163.com, password123456, role_idro1.id)us2 User(namezhang, emailzhang189.com, password201512, role_idro2.id)us3 User(namechen, emailchen126.com, password987654, role_idro2.id)us4 User(namezhou, emailzhou163.com, password456789, role_idro1.id)us5 User(nametang, emailtangitheima.com, password158104, role_idro2.id)us6 User(namewu, emailwugmail.com, password5623514, role_idro2.id)us7 User(nameqian, emailqiangmail.com, password1543567, role_idro1.id)us8 User(nameliu, emailliuitheima.com, password867322, role_idro1.id)us9 User(nameli, emailli163.com, password4526342, role_idro2.id)us10 User(namesun, emailsun163.com, password235523, role_idro2.id)db.session.add_all([us1, us2, us3, us4, us5, us6, us7, us8, us9, us10])db.session.commit()app.run(debugTrue)需求: 编写方法,查询以下内容 查询所有用户数据查询有多少个用户查询第1个用户查询id为4的用户[3种方式]查询名字结尾字符为g的所有数据[开始/包含]查询名字不等于wang的所有数据[2种方式]查询名字和邮箱都以 li 开头的所有数据[2种方式]查询password是 123456 或者 email 以 itheima.com 结尾的所有数据查询id为 [1, 3, 5, 7, 9] 的用户列表查询name为liu的角色数据查询所有用户数据并以邮箱排序每页3个查询第2页的数据 七、代码参考 查询:filter_by精确查询 返回名字等于wang的所有人 User.query.filter_by(namewang).all()first()返回查询到的第一个对象 User.query.first()all()返回查询到的所有对象 User.query.all()3. filter模糊查询返回名字结尾字符为g的所有数据。 User.query.filter(User.name.endswith(g)).all()4. get():参数为主键如果主键不存在没有返回内容 User.query.get()逻辑非返回名字不等于wang的所有数据 User.query.filter(User.name!wang).all()6. not_ 相当于取反 from sqlalchemy import not_ User.query.filter(not_(User.namechen)).all()7. 逻辑与需要导入and返回and()条件满足的所有数据 from sqlalchemy import and_ User.query.filter(and_(User.name!wang,User.email.endswith(163.com))).all()8. 逻辑或需要导入or_ from sqlalchemy import or_ User.query.filter(or_(User.name!wang,User.email.endswith(163.com))).all()9. 查询数据后删除 user User.query.first() db.session.delete(user) db.session.commit() User.query.all()10. 更新数据 user User.query.first() user.name dong db.session.commit() User.query.first()关联查询示例 角色和用户的关系是一对多的关系一个角色可以有多个用户一个用户只能属于一个角色。 查询角色的所有用户 #查询roles表id为1的角色 ro1 Role.query.get(1) #查询该角色的所有用户 ro1.us.all()查询用户所属角色 #查询users表id为3的用户 us1 User.query.get(3) #查询用户属于什么角色 us1.role
http://www.ihoyoo.com/news/52458.html

相关文章:

  • 做网站好一点的软件做专业网站设计多少钱
  • 开发网站网络公司有哪些内蒙古高等级公路建设开发有限责任公司网站
  • 汉中城乡建设网站做爰全过程免费的网站视频
  • 石家庄网站备案专注Wordpress服务
  • 公司网站的栏目设置网页版梦幻西游能赚钱吗
  • 兰州seo外包公司企业网站优化案例
  • 山东mip网站建设wordpress 密码爆破
  • 卫浴外贸版网站案例企业网站备案需要什么资料
  • 在线代理网页免费东莞网站关键词优化怎么做
  • 怎么把一个网站设置成首页安康市相亲平台
  • 手机网站背景图尺寸国家建筑规范标准网
  • 北碚网站建设哪家好海口 网站建设
  • 深圳工信部网站备案河北邯郸有什么好玩的地方
  • 南宁 江苏建设工程信息网站网页版百度云
  • 杭州市建设部门网站网络营销平台有哪些?
  • 网站如何建设手机版新网站建设脑图
  • 家具网站建设比较好的wordpress 閱讀 主题
  • 网站建设 不需要见面营销页面
  • 网站快速备案安全吗徐州人力资源招聘网
  • 建设家装网站wordpress有那些插件
  • 张家口建设厅官方网站动漫做h免费网站
  • 网站rss怎么做wix做网站教程
  • 湖南网站营销seo哪家好北京网站建设116net
  • 绿色家园网站怎么做专业做生鲜的网站
  • 地方生活门户网站建设方案微站开发
  • 内乡微网站建设邓海舟网站建设教程
  • 电商网站开发要哪些技术郑州建设网站建站
  • dw新建站点可口可乐广告策划书范文
  • 移动建站平台超级优化大师下载
  • 邢台wap网站建设价格自己网站上做淘宝搜索引擎