Windows 10家庭中文版,Python 3.6.4,Flask 1.0.2,Eclipse Oxygen.1a Release (4.7.1a),PyDev 6.3.2

SQLAlchemy是一个Python的SQL工具包和对象关系映射工具,它给应用开发者提供了全部且灵活的SQL操作(数据库支持)。

Flask-SQLAlchemy是用于支持SQLAlchemy的Flask插件(怎么开发的?Flask文档有讲解,当然,还得了解SQLAlchemy)。

安装Flask-SQLAlchemy:

pip3 install Flask-SQLAlchemy

会同时把没安装的SQLAlchemy安装上。

参考链接:Flask官网的SQLAlchemy in Flask(后称【官文】)

本文的测试是基于参考链接进行的,测试了其中介绍的三种使用Flask-SQLAlchemy的方式:

1.Declarative

重点:

使用declarative_base()函数建立了Base类,要在数据库中建立自己的表,继承Base类 并 在类中使用Column定义字段即可;

使用scoped_session、sessionmaker建立了与数据库的session——db_session,可以当作是一个连接,开发者可以通过其下的函数操作数据库中的数据。

2.手动ORM

重点:

相比于Declarative方式,此方式不需要建立Base之类的类,但是要使用sqlalchemy下的MetaData()函数建元数据对象(metadata或其它变量名);

相比于Declarative方式,其类和字段定义不是写在一起的,而是分开写,再使用sqlalchemy.orm下的mapper()函数对两者进行映射,这显得更灵活,但要写更多代码;

注意,在【官文】中,手动ORM 下的init_db()函数下面还缺少下面一句——导入models.py,否则,无法自动建表:

import yourapplication.models

3.使用SQL抽象层

重点:

这种方式给开发者提供了“更深入”的操作数据库的能力;

但是,需要自己建立数据库连接 并 在使用完毕后及时清理,没法让Flask自动完成(可以吗?请给点提示);

建立数据表的方式和方式1、2相同,也可以选择从数据库中自动加载(Table函数中autoload=True);

使用数据库引擎获取连接对象,然后,可以使用其execute函数执行很多功能,参考连接;

Table对象在【官文】中主要提供了查询功能,或许有其它功能,需要看SQLAlchemy官网。

测试说明:

使用命令行进入src目录进行的,因此,如果是其它目录,需要更改代码中的数据库文件地址。

测试项目sqlalchemy001结构:

其中,database1.py、models.py、sqlite1.db用于方式1的测试,其它**2文件用于方式2测试、**3文件用于方式3的测试。

测试期间发生的错误:

1.将models.py文件中User类的__repr__的名字写错了,属于“一个字符错误”

原因:正确的是以两个下划线开头,而自己写了一个。

错误现象:

测试是返回的结果和预期不一致,看不到直观的表记录内容,如下:

<sqlalchemy.orm.query.Query object at 0x000002328F434470>

期望结果 和 【官文】一致,更正函数名称后即可。

2.数据库的地址错了!无法打开数据库文件!

原因:我在命令行中进行测试,进入的是sqlalchemy001目录的上一级src目录,在这里导入了模块,但是,用os.getcwd()获取的是src的路径,而不是sqlalchemy001包的路径,因此,数据库的相对地址就是有问题的了。如果这些模块是在Flask应用中使用的话,我的database.py中的相对地址就是正确的。这个相对,并不是和模块文件所在位置相对,而是和模块导入的位置相对。

解决:使用命令行进入src目录进行测试,这样可以确保发布代码时不需要更改路径。

补充:需要学习SQLAlchemy怎么连接数据库的,比如这里就遇到了SQLite访问时设置相对、绝对、内存地址的问题,参考官方文档。不过,我的数据库连接地址和官网中不一样,但我的也是可用的,或许SQLAlchemy已经做了更新,已运行代码为准。

!测试源码!

说明:源码中src目录下的cmd_tests.txt是测试期间执行的所有命令。

后记

感觉今天就联系了怎么使用Flask-SQLAlchemy,而没有将它强大的功能真正应用到Flask项目中,还需要更多测试才行,连接其它数据库、构建一个使用数据库的系统;

那么,使用它就可以让Flask项目连接更多种类的数据库吧?

SQLAlchemy的功能很强大,今天只是接触了皮毛,想精通,需要花费的时间应该不少于学习Flask吧!把握大要,遇到再快速学习就好啦!

Flask:初次使用Flask-SQLAlchemy读取SQLite3的更多相关文章

  1. python 全栈开发,Day142(flask标准目录结构, flask使用SQLAlchemy,flask离线脚本,flask多app应用,flask-script,flask-migrate,pipreqs)

    昨日内容回顾 1. 简述flask上下文管理 - threading.local - 偏函数 - 栈 2. 原生SQL和ORM有什么优缺点? 开发效率: ORM > 原生SQL 执行效率: 原生 ...

  2. flask插件系列之SQLAlchemy基础使用

    sqlalchemy是一个操作关系型数据库的ORM工具.下面研究一下单独使用和其在flask框架中的使用方法. 直接使用sqlalchemy操作数据库 安装sqlalchemy pip install ...

  3. flask系列四之SQLAlchemy

    一.SQLAlchemy简介 (1)flask_sqlalchemy是一套ORM框架. (2)ORM(Object Relationship Mapping):模型关系映射 (3)ORM的好处:可以让 ...

  4. flask的orm框架(SQLAlchemy)-操作数据

    # 原创,转载请留言联系 Flask-SQLAlchemy 实现增加数据 用 sqlalchemy 添加数据时,一定要注意,不仅仅要连接到数据表,并且你的创建表的类也必须写进来.而且字段和约束条件要吻 ...

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

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

  6. Flask01 初识flask、创建flask应用、flask启动配置

    1 什么是flask Flask是一个使用 Python 编写的轻量级 Web 应用框架.其 WSGI 工具箱采用 Werkzeug ,模板引擎则使用 Jinja2 . 百度百科:点击前往 中文文档: ...

  7. flask第一章 flask启动 路由视图 FlaskRequest jinja2 FlaskSession

    一.简单了解flask web框架 优点: 小而精,组件只有session,第三方机构强烈支持flask,极其简单 缺点: 由于第三方软件的关系,稳定性相对较差,flask-session 扩展知识: ...

  8. Flask最强攻略 - 跟DragonFire学Flask - 第九篇 Flask 中的蓝图(BluePrint)

    蓝图,听起来就是一个很宏伟的东西 在Flask中的蓝图 blueprint 也是非常宏伟的 它的作用就是将 功能 与 主服务 分开怎么理解呢? 比如说,你有一个客户管理系统,最开始的时候,只有一个查看 ...

  9. Flask系列(二)Flask基础

    知识点回顾 1.flask依赖wsgi,实现wsgi的模块:wsgiref(django),werkzeug(flask),uwsgi(上线) 2.实例化Flask对象,里面是有参数的 app = F ...

随机推荐

  1. 【Cf #290 C】Fox And Dinner(最大流)

    如果要相邻两个数(a[i] >= 2)相加为质数,显然它们的奇偶性不同,也就是说一个圆桌(环)必须是偶环. 也就是答案的若干个环组成了一张二分图,其中以奇偶分色. 考虑每个点的度数一定为2,用最 ...

  2. 【poj3623】 Best Cow Line, Gold

    http://poj.org/problem?id=3623 (题目链接) 题意 给出一个字符串,每次可以取首或尾接到一个新的字符串后面,求构出的字典序最小的新字符串. Solution 首先可以发现 ...

  3. python之旅:字符编码

    一 了解字符编码的知识储备 一 计算机基础知识 知识储备:cpu.内存.硬盘 二 文本编辑器存取文件的原理(nodepad++,pycharm,word) #1.打开编辑器就打开了启动了一个进程,是在 ...

  4. 题解【bzoj4587 & bzoj4408 [FJOI2016]神秘数】

    Description \(n\) 个数的序列,每次询问一个区间,求最小的一个数使得不能用这个区间中的数之和表示. \(n \leq 10^5, \sum a_i \leq 10^9\) 这两个题一个 ...

  5. Guava之CaseFormat

    com.google.common.base.CaseFormat是一种实用工具类,以提供不同的ASCII字符格式之间的转换. 其对应的枚举常量 从以上枚举中可以看出,java程序员最常用的转换类型为 ...

  6. python---协程理解

    推文:python---基础知识回顾(七)迭代器和生成器 推文:Python协程深入理解(本文转载于该文章) 从语法上来看,协程和生成器类似,都是定义体中包含yield关键字的函数.yield在协程中 ...

  7. 介绍——基于类的视图(class-based view)

    ​刚开始的时候,django只有基于函数的视图(Function-based views).为了解决开发视图中繁杂的重复代码,基于函数的通用视图( Class-based generic views) ...

  8. java内存溢出xms xmx

    java内存堆栈不够用时我们会寻求java参数-Xms和-Xmx的帮助,网上也有许多前辈给出了例子,但很多人喜欢把-Xms和-Xmx的值设置成一样的,甚至我还见过有吧-Xms设的比-Xmx还要大(-X ...

  9. 手把手教你使用webpack搭建vue框架

    我们在使用vue开发项目的时候,都是用vue-cli直接来搭建的.但是这是别人已经造好的轮子,我们既然要使用别人造好的轮子,我们总不能知其然而不知其所以然.所以呢,我这边文章就教你如何使用webpac ...

  10. Java消息队列三道面试题详解!

    面试题 为什么使用消息队列? 消息队列有什么优点和缺点? Kafka.ActiveMQ.RabbitMQ.RocketMQ 都有什么区别,以及适合哪些场景? 面试官心理分析 其实面试官主要是想看看: ...