# 原创,转载请留言联系

  • 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)-操作数据的更多相关文章

  1. flask的orm框架(SQLAlchemy)-创建表

    # 转载请留言联系 ORM 是什么? ORM,Object-Relation Mapping.意思就是对象-关系映射.ORM 主要实现模型对象到关系数据库数据的映射. 优点 : 只需要面向对象编程, ...

  2. flask的orm框架(SQLAlchemy)-一对多查询以及多对多查询

    一对多,多对多是什么? 一对多.例如,班级与学生,一个班级对应多个学生,或者多个学生对应一个班级. 多对多.例如,学生与课程,可以有多个学生修同一门课,同时,一门课也有很多学生. 一对多查询 如果一个 ...

  3. ORM框架SQLAlchemy与权限管理系统的数据库设计

    SQLAlchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用对象关系映射进行数据库操作,即:将对象转换成SQL,然后使用数据API执行SQL并获取执行结果. 执行流 ...

  4. MySQL之ORM框架SQLAlchemy

    一 介绍 SQLAlchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进行数据库操作,简言之便是:将对象转换成SQL,然后使用数据API执行SQL并获取 ...

  5. ORM框架SQLAlchemy

    SQLAlchemy orm英文全称object relational mapping,就是对象映射关系程序,简单来说就是类似python这种面向对象的程序来说一切皆对象,但是使用的数据库却都是关系型 ...

  6. python(十二)下:ORM框架SQLAlchemy使用学习

    此出处:http://blog.csdn.net/fgf00/article/details/52949973 本节内容 ORM介绍 sqlalchemy安装 sqlalchemy基本使用 多外键关联 ...

  7. MySQL 第八篇:ORM框架SQLAlchemy

    一 介绍 SQLAlchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进行数据库操作,简言之便是:将对象转换成SQL,然后使用数据API执行SQL并获取 ...

  8. SQL学习笔记八之ORM框架SQLAlchemy

    阅读目录 一 介绍 二 创建表 三 增删改查 四 其他查询相关 五 正查.反查 一 介绍 SQLAlchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进 ...

  9. ORM框架SQLAlchemy使用学习

    参考源:http://blog.csdn.net/fgf00/article/details/52949973 一.ORM介绍 如果写程序用pymysql和程序交互,那是不是要写原生sql语句.如果进 ...

随机推荐

  1. kettle入门(三) 之kettle连接hadoop&hdfs图文详解(转)

    1 引言: 项目最近要引入大数据技术,使用其处理加工日上网话单数据,需要kettle把源系统的文本数据load到hadoop环境中 2 准备工作: 1 首先 要了解支持hadoop的Kettle版本情 ...

  2. java练习——接口与继承

    父类与子类的构造方法: 如果父类中有一个默认无参的构造方法,那么子类的构造方法中会自动进行调用.如果父类有自己的构造方法,且这时父类没有默认无参的构造方法,那么在子类的构造方法中,必须要调用父类的某个 ...

  3. P1875 佳佳的魔法药水

    P1875 佳佳的魔法药水 题目描述 发完了 k 张照片,佳佳却得到了一个坏消息:他的 MM 得病了!佳佳和大家一样焦急 万分!治好 MM 的病只有一种办法,那就是传说中的 0 号药水 ……怎么样才能 ...

  4. MySQL之查询性能优化(一)

    为什么查询速度会慢 通常来说,查询的生命周期大致可以按照顺序来看:从客户端,到服务器,然后在服务器上进行解析,生成执行计划,执行,并返回结果给客户端.其中“执行”可以认为是整个生命周期中最重要的阶段, ...

  5. 使用原生node写一个聊天室

    在学习node的时候都会练习做一个聊天室的项目,主要使用socket.io模块和http模块.这里我们使用更加原始的方式去写一个在命令行聊天的聊天室. http模块,socket.io都是高度封装之后 ...

  6. Linux忘记root密码的解决办法

    这里以centos6为例: 第一步:先将系统重新启动,在读秒的时候按下任意键就会出现如下图的菜单界面: 第二步:按下『e』就能够进入grub的编辑模式,如图: 第三步:将光标移动到kernel那一行, ...

  7. 自动化测试(三)如何用python写个双色球

    写一个程序,输入N就产生N条双色球号码 红球  6     01-33 蓝球  1     01-16 产生的双色球号码不能重复,写到一个文件里面,每一行是一条 红球: 01 03 05 07 08  ...

  8. [转]个人对AutoResetEvent和ManualResetEvent的理解

    仅个人见解,不对之处请指正,谢谢. 一.作用 AutoResetEvent和ManualResetEvent可用于控制线程暂停或继续,拥有重要的三个方法:WaitOne.Set和Reset. 这三个方 ...

  9. 【转载】Unity3D研究院transform.parent = parent坐标就乱了

    昨天有朋友问我了一个问题,它将Hierarchy视图里的某个子节点下的GameObject拷贝到另外一个对象的子节点下面,他使用的方法就是 transform.parent = parent 但是拷贝 ...

  10. C#向上转型与向下转型(转)

    原文地址:https://blog.csdn.net/wangqingbo0829/article/details/48474173 向上转型:将子类对象转为父类对象.此处父类对象可以是接口. 向下转 ...