flask的orm框架(SQLAlchemy)-操作数据
# 原创,转载请留言联系
Flask-SQLAlchemy 实现增加数据
用 sqlalchemy 添加数据时,一定要注意,不仅仅要连接到数据表,并且你的创建表的类也必须写进来。而且字段和约束条件要吻合,不然会报错的。
sqlalchemy插入数据的格式一般是这样:
变量=创建表的类(字段名1=要插入的数据1,字段名2=要插入的数据2,...) # 例如下面的18行
orm 框架的操作对象.session.add(变量) # 例如下面的19行。add 也有另一种用法,见25行
orm 框架的操作对象.session.commit( ) # 例如下面的20行
注意:flask 默认开启事务,所以操作完成后要 commit 才能提交到数据库。
- from flask import Flask
- from flask_sqlalchemy import SQLAlchemy
- app=Flask(__name__)
- app.config['SQLALCHEMY_DATABASE_URI'] = '数据库类型://数据库登录名:数据库登录密码@数据库的地址:数据库的端口/数据库的名字'
- app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
- app.config['SQLALCHEMY_ECHO'] = True
- db = SQLAlchemy(app)
- class Role(db.Model):
- __tablename__ = "my_table" # 写表名
- id = db.Column(db.INTEGER,primary_key=True) # 这行不能删
- name = db.Column(db.String(10),nullable=False) # 这行也是
- @app.route("/")
- def index():
- r1 = Role(name="用户1")
- db.session.add(r1)
- db.session.commit() # flask默认使用事务,所以每一次操作都要提交事务
- r2 = Role(name="用户2")
- r3 = Role(name="用户3")
- r4 = Role(name="用户4")
- db.session.add_all([r2,r3,r4]) #多行时可以用session.add_all([x,x,x])
- db.session.commit()
- return "hello"
- if __name__ == '__main__':
- app.run(debug=True)
注意:上面的代码,每刷新一次主页,就会增加4条数据进 my_table 表。(因为插入的语句写在视图函数里面。)
Flask-SQLAlchemy 实现查询数据
查询数据的用法比较复杂,所以最好举例子说明。
1.查询全部的用户
user = User.query.all()
注:User 是创建表的类,这里替代表来使用。
all( ) 就是查询所有的,也可以查询第一个的,用 first( ) 。
返回的结果 user 其实是一个列表,里面的每一个元素都是一行数据。有点抽象,你可以想象成一个表插分成一行一行的,然后放在列表里。
2.查询 id 是 1 的用户的名字
user = User.query.filter(User.id == 1).first()
user.name
注:filter 是一个过滤器,里面写条件,相当与SQL语句的 where 。但是注意字段名前要写创建表的类。
还需要注意的是有两个等于号 ==
如果 id 是主键的话,还可以这样:
user = User.query.get(1)
注
3.其他:
- #查询有多少个用户
- count = User.query.count()
- print(count)
- # 查询第一个用户
- first_user = User.query.first()
- print(first_user)
- # 查询id为4的用户信息(方式1,最常用)
- fourth_user = User.query.filter(User.id==4).all()
- print(fourth_user)
- # 查询id为4的用户信息(方式2)
- fourth_user = User.query.get(4)
- print(fourth_user)
- # 查询id为4的用户信息(方式3)
- fourth_user = User.query.filter_by(id=4).all()
- print(fourth_user)
- # 查询名字结尾字符为g的所有数据
- endwithg = User.query.filter(User.name.endswith("g")).all()
- print(endwithg)
- # 查询名字开头字符为g的所有数据
- startwithg = User.query.filter(User.name.startswith("z")).all()
- print(startwithg)
- # 查询名字不等于wang的所有数据[2种方式]
- notwang = User.query.filter(User.name != "wang").all() # 最常用
- print(notwang)
- notwang = User.query.filter(not_(User.name == "wang")).all()
- print(notwang)
- # 查询名字和邮箱都以 li 开头的所有数据[2种方式]
- userdd = User.query.filter(User.name.startswith("li"),User.email.startswith("li")).all() #常见
- print(userdd)
- userdd = User.query.filter(and_(User.name.startswith("li"),User.email.startswith("li"))).all()
- print(userdd)
- # 查询password是`123456`或者`email`以`itheima.com`结尾的所有数据
- user = User.query.filter(or_(User.password == "",User.email.endswith("itheima.com"))).all()
- print(user)
- # 查询id为[1, 3, 5, 7, 9]的用户列表
- # SQL语句中范围查询 in
- # flask中 模型类名.字段.in_(列表)
- list1 = [1,3,5,7,9]
- user = User.query.filter(User.id.in_(list1)).all()
- print(user)
- # 查询所有用户数据,并以邮箱排序
- user = User.query.order_by(User.id).all() #顺序
- print(user)
- user = User.query.order_by(User.id.desc()).all() # 倒序,字段名后加desc()
- print(user)
- # 每页3个,查询第2页的数据
- # ret = paginate(页码,每一页的数据量)
- ret = User.query.paginate(2,3)
- print(ret.page)
- print(ret.items)
注意:用到not_,or_,and_ 要导入!!!
from sqlalchemy import not_,or_,and_
Flask-SQLAlchemy 实现修改和删除数据
sqlchemy 修改和删除数据都是基于查询上的。我们必须先查出数据,all()是查出一行一行数据的列表,first()是查出第一行数据。一定要有这种查出来是一行的思想,才能更好的学习ORM。
1.修改数据
user = User.query.first()
user.name = 'dong'
db.session.commit()
2.删除数据
user = User.query.first()
db.session.delete(user)
db.session.commit()
还有另一种方式:
User.query.first().delete()
db.session.commit()
- # 查询名字结尾字符为g的所有数据[开始/包含]
endwithg = User.query.filter(User.name.endswith("g")).all()
flask的orm框架(SQLAlchemy)-操作数据的更多相关文章
- flask的orm框架(SQLAlchemy)-创建表
# 转载请留言联系 ORM 是什么? ORM,Object-Relation Mapping.意思就是对象-关系映射.ORM 主要实现模型对象到关系数据库数据的映射. 优点 : 只需要面向对象编程, ...
- flask的orm框架(SQLAlchemy)-一对多查询以及多对多查询
一对多,多对多是什么? 一对多.例如,班级与学生,一个班级对应多个学生,或者多个学生对应一个班级. 多对多.例如,学生与课程,可以有多个学生修同一门课,同时,一门课也有很多学生. 一对多查询 如果一个 ...
- ORM框架SQLAlchemy与权限管理系统的数据库设计
SQLAlchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用对象关系映射进行数据库操作,即:将对象转换成SQL,然后使用数据API执行SQL并获取执行结果. 执行流 ...
- MySQL之ORM框架SQLAlchemy
一 介绍 SQLAlchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进行数据库操作,简言之便是:将对象转换成SQL,然后使用数据API执行SQL并获取 ...
- ORM框架SQLAlchemy
SQLAlchemy orm英文全称object relational mapping,就是对象映射关系程序,简单来说就是类似python这种面向对象的程序来说一切皆对象,但是使用的数据库却都是关系型 ...
- python(十二)下:ORM框架SQLAlchemy使用学习
此出处:http://blog.csdn.net/fgf00/article/details/52949973 本节内容 ORM介绍 sqlalchemy安装 sqlalchemy基本使用 多外键关联 ...
- MySQL 第八篇:ORM框架SQLAlchemy
一 介绍 SQLAlchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进行数据库操作,简言之便是:将对象转换成SQL,然后使用数据API执行SQL并获取 ...
- SQL学习笔记八之ORM框架SQLAlchemy
阅读目录 一 介绍 二 创建表 三 增删改查 四 其他查询相关 五 正查.反查 一 介绍 SQLAlchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进 ...
- ORM框架SQLAlchemy使用学习
参考源:http://blog.csdn.net/fgf00/article/details/52949973 一.ORM介绍 如果写程序用pymysql和程序交互,那是不是要写原生sql语句.如果进 ...
随机推荐
- python 10月30日复习
1.把一个数字的list从小到大排序,然后写入文件,然后从文件中读取出来文件内容,然后反序,在追加到文件的下一行中 import codecs list1 = [2,23,8,54,86,12] li ...
- ARC下,不显式指定任何属性关键字时,默认的关键字都有哪些
1.对应基本数据类型默认关键字是 atomic,readwrite,assign 2.对于普通的 Objective-C 对象 atomic,readwrite,strong
- DOS程序员手册(二)
2.6存储设备 随着DOS的升级,磁盘存储容量也有了很大扩充.表2.4介绍了软盘容量的增加以 及所支持驱动器型号的数量. ...
- apache的/etc/httpd/conf/httpd.conf和/usr/local/apache2/conf/httpd.conf区别
一.问题 centos系统用yum安装完apache后,重启后有时会失效,然后去网上找资料,发现有的说重启命令是这样的: /etc/init.d/httpd restart 而有的呢,说重启命令应该是 ...
- 在iis上部署asp.net mvc2.0
mvc2.0是vs2010自带的,在开发环境下可以直接部署在iis中.在生产环境下,如果不能找到正确的mvc2.0版本,可以直接把开发环境下的System.Web.Mvc.dll拷贝过去使用. 1, ...
- [转载]kd tree
[本文转自]http://www.cnblogs.com/eyeszjwang/articles/2429382.html k-d树(k-dimensional树的简称),是一种分割k维数据空间的数据 ...
- NodeJs02 美女爬虫
note: demo代码要编号 导出模块 一个js文件就是一个模块,模块内部的所有变量,对象,方法对外界都不可见.如果想暴漏出去让别人用,就需要导出模块.语法如下: module.exports = ...
- Alpha 冲刺
队名:我头发呢队 组长博客 作业博客 杰(组长) 过去两天完成了哪些任务 查阅Python爬取音源的资料,如 Python3爬虫抓取网易云音乐热评实战 Python爬取高品质QQ音乐(2) 如何爬网易 ...
- 使用百度Echarts制作力导向图
最近项目需求制作一个力导向图来展示企业的画像等关系信息,故想到了百度Echarts的关系图,在这使用Echarts3.0版本来实现.先上效果图,再看代吗 哎,本来想整个工程扔出来,发现好像没地方上传附 ...
- 【bzoj1856】[Scoi2010]字符串 Catalan数
题目描述 lxhgww最近接到了一个生成字符串的任务,任务需要他把n个1和m个0组成字符串,但是任务还要求在组成的字符串中,在任意的前k个字符中,1的个数不能少于0的个数.现在lxhgww想要知道满足 ...