一、库安装

Flask-SQLAlchemy    2
SQLAlchemy 1.0.8

二、进入venv

三、切换到项目Sample\ 文件夹,进入manager.py 的shell

python manager.py shell

四、创建data.sqlite数据库

from app import db
from app import models
db.create_all()

  执行完最后一条命令后,在Sample\app下就会生成一个data.sqlite文件

五、在Pycharm中导入数据库,方便可视化

  Data Source -> Sqlite(Xerial)

  

  然后进行如下操作

  

  点击OK后,会发现已经导入成功了

  

六、在shell模式下操作数据

  1. 增(写入数据)

>>> from app import db
>>> from app import models
>>> from app.models import User,Role
>>> admins = Role(name='administrators')
>>> mod = Role(name='moderator')
>>> db.session.add(admins)
>>> db.session.add(mod)
>>> db.session.commit() #或者两条一起添加
#db.session.add([admins,mod])

  注意,对数据库增删改查,都必须进行commit()方法才能写入数据库。

  现在来查看下,到底有没有写入?双击roles表,看到了我们写入的两行记录

  2. 删(删除数据)

# 说明一下:表的每行记录都是一个对象
# 例如上面:admins和mod都是对象,name是其属性 >>> admins.name
u'administrators' # 为什么说明这点,因为删除行就是删除对象 >>> db.session.delete(admins)
>>> db.session.commit() # 删除成功

  3.改(修改数据)  

# 通过对属性重新赋值,添加,提交事务进行修改数据

mod.name='moderators-new'
db.session.add(mod)
db.session.commit()

  4. 查(查询数据)

# query返回的是包含所有记录的查询对象(BaseQuery)
>>> Role.query
<flask_sqlalchemy.BaseQuery object at 0x0000000004936E10> # query之后如果需要对记录进行条件筛选,要加上过滤函数,返回过滤后的查询对象(BaseQuery),可以多次执行过滤函数
>>> Role.query.filter_by(name='admins')
<flask_sqlalchemy.BaseQuery object at 0x0000000004A2C438> # 过滤函数之后,加执行函数,返回是记录对象(如果是多行怎么办),赋值为一个对象名Admin
>>> Role.query.filter_by(name='administrators').first()
<app.models.Role object at 0x0000000004A13F98> #Admin对象的属性,就相当于单元格的值
>>> Admin = Role.query.filter_by(name='administrators').first()
>>> Admin.name
u'administrators'

  5. 表之间的关联

还记得我们之前定义models.py中的Role和User类时,那个relationship吗,关键是参数backref

先来看看我们Role表中的对象admins,name=administrator,id为3

我们知道这个Role表中的id和User表中的role_id(外键)是对应连接的。

那我们在往User表写入数据的时候,还要写入对应的role_id,有个一步到位的方法,就是把Role行的对象作为参数传给定义类时backref的值(这里是role)

他就会自动获取id,并传给role_id

  执行代码

>>> Bikmin = User(name='Bikmin',roles=admins)
>>> db.session.add(Bikmin)
>>> db.session.commit()

  看看效果,role_id为3,对应上了

  这里说一下,query()和get()的区别

1. query() 返回所有记录的查询对象

2. get() 使用的主键查询

  示例

>>> Role.query.get(2).name
u'moderator'

返回的是moderator,和id一样

  要讲SQLAlchemy查询语句转成原生的SQL语句,只需用str()即可

str(Role.query.filter_by(name='administrators').all())

  

  如果在第一次使用shell会话的时候,创建了行的Python对象,那么再关闭Shell后,再打开,这些对象不能再使用,必须重新创建

admins = Role.query.filter_by(name='administrators').first()

参考文章:选择(Select),插入(Insert), 删除(Delete)

Flask入门之SQLAlchemy数据库连接操作(第15讲)的更多相关文章

  1. Flask入门之SQLAlchemy配置与数据库连接

    1. 安装SQLAlchemy pip install flask-sqlalchemy 2. 导入和配置 from flask_sqlalchemy import SQLAlchemy basedi ...

  2. Flask入门和快速上手

    目录 Flask入门和快速上手 python三大主流框架对比 Flask安装 依赖 可选依赖 创建flask项目 flask最小应用--hello word 非法导入名称 调试模式 路由 唯一的 UR ...

  3. Flask入门系列(转载)

    一.入门系列: Flask入门系列(一)–Hello World 项目开发中,经常要写一些小系统来辅助,比如监控系统,配置系统等等.用传统的Java写,太笨重了,连PHP都嫌麻烦.一直在寻找一个轻量级 ...

  4. Flask 中的 SQLAlchemy 使用教程

    Flask 是一个 python web micro framework.所谓微框架,主要是 flask 简洁与轻巧,自定义程度高.相比 django 更加轻量级. 之前一直折腾 django,得益于 ...

  5. Flask入门到放弃(四)—— 数据库

    转载请在文章开头附上原文链接地址:https://www.cnblogs.com/Sunzz/p/10979970.html 数据库操作 ORM ORM 全拼Object-Relation Mappi ...

  6. Flask入门之结构重组(瘦身)-第13讲笔记

    1. pip list Flask 0.10.1 Flask-Bootstrap 3.3.5.6 Flask-SQLAlchemy 2 Flask-Script 2.0.5 Flask-WTF 0.1 ...

  7. Flask入门之Pycharm写Hello Word

    在这里记录整理Flask入门的笔记! 今天讲讲使用Pycharm写一个Hello World 前提是已经安装好Pycharm,安装过程很简单,这里不赘述. 只放两个可以提供注册码的网站: Intell ...

  8. Flask 系列之 SQLAlchemy

    SQLAlchemy 是一种 ORM 框架,通过使用它,可以大大简化我们对数据库的操作,不用再写各种复杂的 sql语句 了. 说明 操作系统:Windows 10 Python 版本:3.7x 虚拟环 ...

  9. flask 在视图函数里操作数据库

    在视图函数里操作数据库 在视图函数里操作数据的方式和在python shell中的联系基本相同,只不过需要一些额外的工作.比如把查询结果作为参数 传入模板渲染出来,或是获取表单的字段值作为提交到数据库 ...

随机推荐

  1. 【一天一道LeetCode】#53. Maximum Subarray

    一天一道LeetCode系列 (一)题目 Find the contiguous subarray within an array (containing at least one number) w ...

  2. 常用Map实现类对比

    翻译人员: 铁锚 翻译时间: 2013年12月12日 原文链接: HashMap vs. TreeMap vs. Hashtable vs. LinkedHashMap Map 是最常用的数据结构之一 ...

  3. LDA实现

    topic model本质上就一个套路,在doc-word user-url user-doc等关系中增加topic层,扩充为2层结构,一方面可以降维,另一方面挖掘深层次的关系,用户doc word ...

  4. 【Linux 操作系统】vim编辑器配置及常用命令

    最近工作不安分, 没有了刚入行时候的锐气, 不知道什么时候开始懈怠起来, 周末在电脑旁边看新闻, 搞笑图片, 追美剧, 一坐就是一天, 很是空虚. 我需要摆脱这种状态, 正好想学习一下安卓底层, An ...

  5. 【LaTeX排版】LaTeX论文排版<四>

    1.表格的插入     一般的表格插入的代码如下: \begin{table}[H] \centering \begin{tabular}{|c|c|c|} \hline 感知方法&优点&am ...

  6. HBase Master 启动

    –>首先初始化HMaster –>创建一个rpcServer,其中并启动 –>启动一个Listener线程,功能是监听client的请求,将请求放入nio请求队列,逻辑如下: –&g ...

  7. Lease问题

    经过查明原来是lease引发的问题.不过查问题的过程让我们耽误了很多修复故障的时间,很是不爽. 起因:datanode和regionserver以及master同时挂掉 现象:datanode重启后, ...

  8. java--GUI(图形用户接口)

    转载请申明出处:http://blog.csdn.net/xmxkf/article/details/9795435 day22 01-GUI(概述) GUI(图形用户界面) 1. GUI(Griph ...

  9. 使用XStream是实现XML与Java对象的转换(3)--注解

    六.使用注解(Annotation) 总是使用XStream对象的别名方法和注册转换器,会让人感到非常的乏味,又会产生很多重复性代码,于是我们可以使用注解的方式来配置要序列化的POJO对象. 1,最基 ...

  10. 《JUnit实战(第2版)》读书笔记

    第1章 JUnit起步 主要了解JUnit,如何安装.运行JUnit 要点 JUnit4不需要像JUnit3那样extends TestCase类 Junit4基本都是用注解(该书都翻译为注释,但我喜 ...