• Flask:初次使用Flask-SQLAlchemy读取SQLite3


    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吧!把握大要,遇到再快速学习就好啦!

  • 相关阅读:
    matlab学习笔记10_7数值计算类型和常用计算公式
    matlab学习笔记10_5 通用字符串操作和比较函数
    matlab学习笔记10_6 字符串与数值间的转换以及进制之间的转换
    matlab-数组取值
    matlab学习笔记10_4MATLAB中的字符串表示
    matlab学习笔记10_3关系运算符和逻辑运算符
    matlab学习笔记10_2 一般操作符
    matlab学习笔记10 一般运算符
    matlab学习笔记9 高级绘图命令_2 图形的高级控制_视点控制和图形旋转_色图和颜色映像_光照和着色
    matlab学习笔记9 高级绘图命令_1 图形对象_根对象,轴对象,用户控制对象,用户菜单对象
  • 原文地址:https://www.cnblogs.com/luo630/p/9084392.html
Copyright © 2020-2023  润新知