(SQLAlchemy中添加数据 )https://blog.csdn.net/wei18791957243/article/details/85256848 

    添加数据,添加好的表

     

SQlalchemy数据库查询

1. 查询数据

(1) 查询表中的所有数据:    模型类.query.all()    # 返回每个数据的对象的列表

           例如:   li = Role.query.all()    # 保存的是数据的对象,列表形式      Role 是一个模型类

                          li[0]   #   取第一个数据对象

                        li[0].name   # 就取出了第一个数据对象的name属性,即在数据库中的列名为name的第一个值

    (2)查询第一条数据:

 r = Role.query.first()     #   查询到第一个条数据的对象

               r.name                 #  然后取出相应的值

              还有一种方法:  按照主键的值来进行查询一条数据

              r = Role.query.get(2)           #    2  即查询出主键为2  的那条数据的对象

              r.name     #  然后取出相应的值

    (3)  利用db.session 的方式查询

查询多条

               db.session.query(模型类).all()         # 返回的是一个数据对象列表   、

         查询第一条

db.session.query(模型类).first()         # 返回的是第一个数据对象

         查询其中的一条

db.session.query(模型类).get(主键的值)         # 返回的是一个数据对象

    2.   查询数据的时候进行过滤

       (1)  模型类.query_filter_by(name="wang").all   # 查询出name为wang的数据对象,返回的是一个列表,然后可以根                    据属性来获取相应的值                 也可以.first()  

如果还有其他的条件,直接以逗号分隔在filter_by()里面添加就行

如果查询的数据不存在返回None

     (2) 模型类.query_filter(模型类.name=="wang").all    #   需要指名  模型类.属性    ,并且是双等号

     (3)   查询时使用    “或”  以及模糊查询endswith()

                   导入模块  :  from sqlalchemy import or_

                 #   如下:   查询出 User模型类中的name属性等于“wang”或者email属性是以163.com结尾的数据对象

                 User.query.filter(or_(User.name=="wang",User.email.endswith("163.com"))).all()      #  返回列表

      (4)offset()   # 偏移:从第几条开始查询,  limit  ()  #   表示取几条

User.query.offset(2).limit(2).all     #   查询,从表中第二条数据开始查询,查询出的结果取两个,返回数据对象列表

       可以一起用,也可分开来用

     (5) flask中的排序查询

      默认是升序(asc()可以不用写:      User.query.order_by(User.id).all()     #  User 是模型类,通过User中的id进行排序

       降序:  desc()   

           User.query.order_by(User.id.desc()).all()       #  直接在要按什么排序的后面,desc()  的方式,进行降序排序

      (6)  查询时,group_by 的使用

               如果要 用到聚合函数   则要导入     

               from sqlalchemy import func

             #   分组统计出  User模型类中 表中的 role_id的每个数据的次数

              db.session.query(User.role_id,func.count(User.role_id)).group_by(User.role_id).all()    # 返回查询的结果列                表不是数据的对象了

      (7)  关联查询

            在模型类里面添加了relationship(), 关联了另外一模型类,

           在Role的模型类中,创建了属性  users = db.relationship("User",backref="role") ,关联了另外一个User的模型类

( 1)从Role往User里面查询

ro = Role.query.get(1)  # 获取到了,Role中的一 个数据对象

直接 ro.user  就可以把Role表中的相对应在User中数据对象取出来

(2 ) 从User往Role里面查询

user = User.query.get(1)

直接在user.role就可以查询到Role表中相对应的数据对象

(8)定义显示信息

               在模型类中,重写   __repr__   方法,  

    def __repr__(self):"""定义之后,可以让显示对象的时候更直观"""return "User object : name=%s" % self.name

 db_demp.py

from flask import Flask
from flask_sqlalchemy import SQLAlchemyapp = Flask(__name__)class Config(object):"""配置参数"""'''sqlalchemy的配置参数'''SQLALCHEMY_DATABASE_URI = "mysql+mysqlconnector://root:123456@127.0.0.1:3306/db_python"'''设置sqlalchemy自动跟踪数据库'''SQLALCHEMY_TRACK_MODIFICATIONS = True# 设置参数
app.config.from_object(Config)'''创建数据库 sqlalchemy 工具对象'''
db = SQLAlchemy(app)"""创建数据库模型类(继承 sqlalchemy 工具对象中的Model类),一个模型类对应一张模型表数据库表名的常见规范:(1) 数据库名缩写_表名   (2) tbl_表名
"""class Role(db.Model):"""用户身份表"""__tablename__ = "tbl_roles"id = db.Column(db.Integer, primary_key=True)name = db.Column(db.String(32), unique=True)'''relationship() :第一个参数表明这个关系的另一端是哪个模型(类)把两个表关联在一起,不添加也是可以的,根据自己的需求backref : 在关系的另一模型中添加反向引用相当于给要关联的表添加一个role属性不添加也是可以的,根据自己的需求 '''user = db.relationship("User", backref="rpp")  # 从模型类中def __repr__(self):"""定义之后,可以让显示对象的时候更直观"""return "Role object : name=%s" % self.nameclass User(db.Model):"""用户表"""__tablename__ = "tbl_users"  # 指明数据库的表名id = db.Column(db.Integer, primary_key=True)  # 整型的主键,会默认设置为自增主键name = db.Column(db.String(64), unique=True)email = db.Column(db.String(128), unique=True)password = db.Column(db.String(128))# db.ForeignKey  外键关联# User类中添加了一个role_id变量,数据类型db.Integer,第二个参数指定外键是哪个表中哪个id。role_id = db.Column(db.Integer, db.ForeignKey("tbl_roles.id"))  # 从底层中def __repr__(self):"""定义之后,可以让显示对象的时候更直观"""return "User object : name=%s" % self.nameif __name__ == '__main__':'''清除数据库中的所有数据'''db.drop_all()'''创建所有表'''db.create_all()# 给用户身份表中添加两个数据'''创建一个对象'''role1 = Role(name="admin")'''在Flask-SQLAlchemy中,插入、修改、删除操作,均由数据库会话管理。会话用db.session表示''''''session 记录对象任务 '''db.session.add(role1)'''提交任务到数据库中'''db.session.commit()role2 = Role(name="stuff")db.session.add(role2)db.session.commit()# 给用户表中添加数据us1 = User(name='wang', email='wang@163.com', password='123456', role_id=role1.id)us2 = User(name='zhang', email='zhang@189.com', password='452342', role_id=role2.id)us3 = User(name='chen', email='chen@126.com', password='782677', role_id=role2.id)us4 = User(name='zhou', email='zhou@163.com', password='858585', role_id=role1.id)'''一次性添加多条数据'''db.session.add_all([us1, us2, us3, us4])db.session.commit()

然后在ipython中导入py文件

"""导入相关的py文件"""
In [1]: from db_demo import *In [2]: Role.query.all()
Out[2]: [<Role 1>, <Role 2>]In [3]: li = Role.query.all()In [4]: li
Out[4]: [<Role 1>, <Role 2>]In [5]: r = li[0]In [6]: type(r)
Out[6]: db_demo.RoleIn [7]: r.name
Out[7]: 'admin'In [8]: Role.query.first()
Out[8]: <Role 1>In [9]: r.name
Out[9]: 'admin'
"""#  根据主键id获取对象"""
In [10]: r = Role.query.get(2)In [11]: r
Out[11]: <Role 2>In [12]: r.name
Out[12]: 'stuff'"""另一种查询方式"""
In [13]: db.session.query(Role).all()
Out[13]: [<Role 1>, <Role 2>]In [14]: db.session.query(Role).get(2)
Out[14]: <Role 2>In [15]: db.session.query(Role).first()
Out[15]: <Role 1>In [16]: User.query.filter_by(name="wang")
Out[16]: <flask_sqlalchemy.BaseQuery at 0x276d8975eb8>In [18]: User.query.filter_by(name="wang").all()
Out[18]: [<User 1>]In [19]: User.query.filter_by(name="wang").first()
Out[19]: <User 1>In [20]: user = User.query.filter_by(name="wang").first()In [21]: user.name
Out[21]: 'wang'In [22]: user.email
Out[22]: 'wang@163.com'In [23]: User.query.filter_by(name="wang", role_id=1).first()
Out[23]: <User 1>In [24]: User.query.filter_by(name="wang", role_id=2).first()
"""没有该数据时,返回的是空"""
In [25]: user = User.query.filter_by(name="wang", role_id=2).first()In [26]: type(user)
Out[26]: NoneTypeIn [27]: user = User.query.filter(User.name=="wang", User.role_id==1).first()In [28]: user
Out[28]: <User 1>In [29]: user.name
Out[29]: 'wang'"""模糊查询"""
In [30]: from sqlalchemy import or_In [31]: User.query.filter(or_(User.name=="wang", User.email.endswith("163.com"))).all()
Out[31]: [<User 1>, <User 4>]In [32]: li = User.query.filter(or_(User.name=="wang", User.email.endswith("163.com"))).all()In [33]: li[0].name
Out[33]: 'wang'In [34]: li[1].name
Out[34]: 'zhou'
"""offset偏移 即跳过几条"""
In [35]: User.query.offset(2).all()
Out[35]: [<User 3>, <User 4>]In [36]: li = User.query.offset(2).all()In [37]: li[0].name
Out[37]: 'chen'In [38]: li[1].name
Out[38]: 'zhou'In [39]: li = User.query.offset(1).limit(2).all()In [40]: li
Out[40]: [<User 2>, <User 3>]In [41]: li[0].name
Out[41]: 'zhang'In [42]: li[1].name
Out[42]: 'chen'
"""排序查询"""
In [43]: User.query.order_by("id").all()
Out[43]: [<User 1>, <User 2>, <User 3>, <User 4>]In [44]: li = User.query.order_by(User.id.desc()).all()In [45]: li
Out[45]: [<User 4>, <User 3>, <User 2>, <User 1>]In [46]: li[0].name
Out[46]: 'zhou'In [47]: li[1].name
Out[47]: 'chen'"""分组查询"""
In [48]: from sqlalchemy import funcIn [49]: db.session.query(User.role_id, func.count(User.role_id)).group_by(User.role_id).all()
Out[49]: [(1, 2), (2, 2)]

Flask框架(SQLAlchemy(python3版本)中查询数据的方法,以及定义显示信息 )相关推荐

  1. Flask框架(SQLAlchemy(python3版本)中修改数据的方法和删除数据 的方法)

    有数据表, db_demo.py : https://blog.csdn.net/wei18791957243/article/details/85257910    # 有模型类User db  : ...

  2. Flask框架(SQLAlchemy(python3版本)中添加数据 )

    安装SQLAlcemy.配置SQLAlcemy.创建模型类可参考:https://blog.csdn.net/wei18791957243/article/details/85254130 1. 在F ...

  3. flask查询mysql数据展示_flask再学习-思考之怎么从数据库中查询数据在页面展示!...

    看别人视频觉得很简单,要自己做蒙蔽了!这样子.NO! 1. 流程: 首先要有和数据库连接的驱动!一般有PYMySQL mysqlclient 等 使用扩展Flask-SQLAlchemy 获得orm对 ...

  4. mysql从一个表查出写入另一个表_sql语句 怎么从一张表中查询数据插入到另一张表中...

    展开全部 sql语句从一张表中查询数据插入到另一张表中的方法如下:e68a843231313335323631343130323136353331333365653762 1.select * int ...

  5. Excel中使用VLOOKUP在多个sheet表中查询数据的公式

    需求 原始数据较多,甚至超过了一个sheet的行容量,不得不把数据折行到第二个sheet,甚至第三个sheet表中.这样,在另外一个sheet表中的VLOOKUP查询就需要把查询范围设置为多个shee ...

  6. android用于查询数据的方法,android: SQLite查询数据

    掌握了查询数据的方法之后,你也就将数据库的 CRUD 操 作全部学完了.不过千万不要因此而放松,因为查询数据也是在 CRUD 中最复杂的一种 操作. 我们都知道 SQL 的全称是 Structured ...

  7. python把数据写入excel_Python向excel中写入数据的方法

    Python向excel中写入数据的方法 最近做了一项工作需要把处理的数据写入到Excel表格中进行保存,所以在此就简单介绍使用Python如何把数据保存到excel表格中. 数据导入之前需要安装 x ...

  8. oracle怎么把数据跑进视图里,在Oracle中向视图中插入数据的方法

    在Oracle中向视图中插入数据的方法 插入视图的条件: 1.如果视图是基于一个基础表产生的,那么这就称为非连接视图,所有的非连接视图都是可以更新的,也就是说可以在该视图上进行,INSERT,UPDA ...

  9. Mysql更新字段中部分数据的方法

    如果现在需要Mysql更新字段重部分数据,而不是全部数据,应该采用何种方法呢?下面介绍了两种情况下Mysql更新字段中部分数据的方法,供您参考. Mysql更新字段中部分数据第一种情况: update ...

最新文章

  1. 遍历目录下的文件每250M打包一个文件
  2. Xcode中Info.plist文件各个键的作用说明【搜藏】
  3. 【JavaScript】apply和call的区别在哪?
  4. Java教程:Java选择结构和循环结构的总结
  5. PHP第三方登录—OAuth2.0协议
  6. 龙威ol服务器维护,《龙威OL》搅屎棍职业技能攻略详解
  7. 高淇python讲义百度文库_Python课堂笔记(高淇400集第一季).pdf
  8. svn多分支开发合并技巧(idea or tortoiseSVN)
  9. 详解EBS接口开发之采购订单导入(转载)
  10. M1 Mac安装PostgreSQL
  11. R里面数字取整相关的操作有一组函数: ceiling ;floor;trunc; round; signif
  12. 2022 年InfoWorld 精选最佳开源软件
  13. 广州楼市:行情大秘密,买房者后悔没早知道
  14. Endnote插入参考文献时中英文混排字体设置
  15. 在Ubuntu20.04中安装edb1.3.0
  16. 你的网络被DNS劫持了吗?dns 被劫持怎么解决
  17. Linux磁盘与文件系统管理(闲看庭前花开花落,坐观漫天云卷云舒)
  18. CMMI2.0之我见-需求开发和管理RDM
  19. 【Linux从0到1】第十一篇:多线程
  20. 4. 列表一学完,Python 会一半,滚雪球学 Python

热门文章

  1. python求最大素数_Python实现求最大公约数及判断素数的方法
  2. 二进制代码查看器Binary Viewer下载教程
  3. SpringMVC-拦截器快速入门
  4. Springboot项目中配置tomcta监控日志
  5. MyBatis Plus——忽略某个实体类属性和数据库表字段之间的映射关系
  6. Match Points
  7. mysql connector python linux_Python使用mysql.connector链接mysql数据库
  8. 关于MVC框架和spring
  9. JavaScript学习笔记04【高级——DOM和事件的简单学习、BOM对象】
  10. git 上的pull request 是什么意思?