Python flask-sqlalchemy初级解析

flask-SQLAlchemy 是一个为您的flask应用增加SQLAlchemy支持的扩展。

在python扩展库中其实包含了SQLAlchemy。在版本的不断叠加后,已经被整合到flask架构中,flask-SQLAlchemy简化在Flask中SQLAlchemy的使用,提供了有用的默认值和额外的助手来更简单地完成常见任务。

笔者认为SQLAlchemy比较精髓的是使用ORM(对象关系映射),相对于传统连接数据库使用select,update,insert,delete操作数据表来说具有以下特点[1]:

  简单——以最基本的形式建模数据

  传达性——数据库结构被任何人都能理解的语言文档化

  精确性——基于数据模型创建正确标准化的结构

完事无绝对,ORM有明显的优势,就会想伴随有缺点。

  隐蔽性——相对于传统使用select,update,insert,delete来说,隐藏了操作数据表的具体操作,不利于SQL的学习

  数据表结构修改难——在设计中有时会忽略了一些字段的定义,在ORM模式中只能更新映射表更新字段,而且效果远不如alter table [表名] add 字段名更新字段来的容易理解,常常会忽略一些细节

但不得不说,ORM模式的确打开了新世界的大门,大大减少了学习及使用数据库的过程与难度。

from flask import Flask
from flask_sqlalchemy import SQLAlchemy
import os
basedir = os.path.abspath(os.path.dirname(__file__))

app = Flask(__name__)
app.config[‘SQLALCHEMY_DATABASE_URI‘] = ‘sqlite:///‘ + os.path.join(basedir, ‘test.db‘)
app.config[‘SQLALCHEMY_TRACK_MODIFICATIONS‘] = False
db = SQLAlchemy(app)

def db_init():
db.create_all()

一句一句解释

(1)from flask import Flask

Flask类是flask框架的核心类,它实现了WSGI应用规范。

(2)from flask_sqlalchemy import SQLAlchemy

将flask-sqlchemy中内置的SQLAlchemy引用到该文件下。

(3)import OS

本实例中需要将数据库创建在工程的更目录下,使用python内置os库可以很方便的定位到工程路径下。

(4)basedir = os.path.abspath(os.path.dirname(__file__))

将当前文件传入dirname函数中,获取当前文件所在路径,abspath函数获取该文件所在的绝对路径,以便在后边配置创建数据库的路径使用。

(5)app = Flask(__name__) [2]

Flask构造函数的第一个参数指定一个引入参数/importname。

Flask框架使用这个名字进行静态资源、模板、错误信息的定位。除非你清楚的理解它的作用,通常情况下,我们总应该使用特殊变量__name__。

Flask实例是可调用的(具有call方法),这个实例可以直接对接 WSGI服务器。

(6)app.config[‘SQLALCHEMY_DATABASE_URI‘] = ‘sqlite:///‘ + os.path.join(basedir, ‘test.db‘)

app.config[‘SQLALCHEMY_TRACK_MODIFICATIONS‘] = False

SQLALCHEMY_DATABASE_URI:用于连接数据库

  eg:sqlite:////tmp/test/db

    mysql://username:[email protected]/db

SQLALCHEMY_TRACK_MODIFICATIONS:

如果设置成True(默认情况),Flask-SQLAlchemy 将会追踪对象的修改并且发送信号。这需要额外的内存, 如果不必要的可以禁用它。如果你不显示的调用它,在最新版的运行环境下,会显示警告。

(7)db = SQLAlchemy(app)

SQLAlchemy函数,将刚刚创建的Flask框架,与工程所需要使用的数据库绑定到一起,以便实现工程与数据库连接,实现数据操作。

(8)db_init()函数

手动创建函数,以便初始化数据库

from database import db

class User(db.Model):
  id = db.Column(db.Integer, primary_key=True)
  username = db.Column(db.String(80), unique=True)
  email = db.Column(db.String(120), unique=True)

def __init__(self, username, email):
  self.username = username
  self.email = email

def __repr__(self):
  return ‘<User {}>‘ .format(self.usernam)

仍然是逐句解释

(1)from database import db

将刚刚创建的SQLAlchemy应用引用到当前文件,以便将映射表映射到数据库中,以便对于数据表的创建修改以及更新删除。

(2)db.Model

上边提到,当工程文件不提供映射表时将创建一个空的数据库文件。继承db.Model类,将我们当前创建的映射表和数据库db绑定在一起。此时工程文件调用create_all函数后,会自动将绑定后的映射表文件创建在数据库文件中。

如果想探究详细绑定关系,请应用纯SQlAlchemy库,而不是flask-sqlalchemy库,之前调到了flask-sqlalchemy是简化版的SQLAlchemy,隐藏了许多细节,深入研究请转至SQLAlchemy官方文档查看应用细节。

(3)db.Column

创建映射表字段,以下为最常见的类型

Integer 存储整数
String(size) 存储有长度的字符串
Text 存储较长的unicode文本
DateTime 存储时间类型数据
Float 存储浮点值
Boolean 存储布尔值
PickleType 存储一个python对象
LargeBinary 存储一个任意大的二进制数据

primary_key=True设置当前字段为主键

uniqu=True设置当前字段不可重复

当然也可以设置主键外键,在本文中只创建了一张数据表,在以后的文章中将说明此操作。

(4)__init__函数

为映射表的构造函数,一般用来初始变量,配置相关数据时使用

(5)__repr__函数

为以后调试输出提供接口

后续有时间再进行添加总结,关于ORM多对多关系中的注意事项以及优化查询.

时间: 2024-12-08 14:54:00

Python flask-sqlalchemy初级解析的相关文章

Python Flask环境搭建

Python Flask环境搭建 尽管之前多次部署过Python的Flask环境,由于没有做文档输出工作,导致后面部署时每次都得重新去填之前填过的坑,为了方便自己,也为了工作效率的提升,于是自己花了一点时间重新实验并且整理出来部署的文档,包括一键部署Flask环境脚本install.sh,和Flask环境需要的扩展的安装包packages.txt! 全部贴在代码区域! 下面是一键安装脚本install.sh #! /usr/bin/bash #version v1.0 # by andy.zhu

flask SQLAlchemy中一对多的关系实现

SQLAlchemy是Python中比较优秀的orm框架,在SQLAlchemy中定义了多种数据库表的对应关系, 其中一对多是一种比较常见的关系.利用flask sqlalchemy实现一对多的关系如下: 1. 建立数据库的模型 在本次试验中建立三个表: user, phone ,atttr.user 和phone, phone 和atttr均为一对多的关系.实现如下: #!/usr/bin/env python # -*- coding: utf-8 -*- from flask import

[Python][flask][flask-login]关于flask-login中各种API使用实例

本篇博文跟上一篇[Python][flask][flask-wtf]关于flask-wtf中API使用实例教程有莫大的关系. 简介:Flask-Login 为 Flask 提供了用户会话管理.它处理了日常的登入,登出并且长时间记住用户的会话. 直白的讲,flask-login包为用户管理了涉及到用户登录相关的缓存(Session)管理. Posted by Alima | cnblogs. 一.安装(Install) PC环境:Windows 7,Python 3.5.2. PS:此次配置环境阶

Python+Flask+MysqL的web建设技术过程

前言 本人在一学期时间实现了Python+Flask+MysqL的web建设,页面具有简单的登录注册发布文章搜索文章等功能. 这篇文章总结了我最近一段时间的学习成果:使用Flask框架搭建一个web service,并在其中加上一些简单的css,js,html等.在本文中以实际的用户模块为例.之所以写这篇文章是因为想要总结自己一学期的学习成果并且与大家分享.由于是新手如有错漏请见谅. 一.使用工具 python3.5 实现此页面所有的static文件.templates文件与py文件 二.完成基

flask sqlalchemy实现分页功能

接触到了一个新的实现分页的功能,记录下来 第一种方法:() flask sqlalchemy里面包括分页查询首先记录一下此方法实现分页查询: Post.query.paginate(1,10)    #第一个参数指示返回第几页的内容,第二页的参数表示每页展示的对象数量 Post.query.paginate(2,10)   #表示展示第二页数据,展示的对象是11~20个对象 不过,这种分页查询和.first(),.all()不同的是:它返回的是一个pagination对象 需要在前端页面中添加.

Python Flask+Bootstrap+Jinja2 构建轻量级企业内部系统平台框架

1.最近公司运维需求,学习python flask 满足环境治理系统的开发;入门如下;    环境类型:      Python 2.7.5         获取地址:https://www.python.org/downloads/       Flask  1.0.2               pip 安装使用模快如下:           flask==1.0.2           request==1.0.2           Jinja2==2.10           Flas

Python Flask高级编程之RESTFul API前后端分离精讲 (网盘免费分享)

Python Flask高级编程之RESTFul API前后端分离精讲 (免费分享)  点击链接或搜索QQ号直接加群获取其它资料: 链接:https://pan.baidu.com/s/12eKrJKN-MzscalsJKRoL5w 提取码:88hj 免费分享,如若链接失效请加群 其它资源在群里,私聊管理员即可免费领取:群——517432778,点击加群,或扫描二维码 免费课程资料领取目录:  Python Flask构建微信小程序订餐系统 Python分布式爬虫必学框架Scrapy打造搜索引擎

Python Flask高级编程之从0到1开发《鱼书》精品项目 学习 教程??

Python Flask高级编程之从0到1开发<鱼书>精品项目 学习教程 一 .安装环境我们使用 flask web框架,并用 sqlalchemy来做数据库映射,并使用 migrate做数据迁移. $ pip install flask $ pip install SQLAlchemy==0.7.9 $ pip install flask-sqlalchemy $ pip install flask-migrate$ pip install sqlalchemy-migrate 二.建立项目

Python Flask 狗书电子版pdf

Python Flask 狗书电子版pdf 链接:https://pan.baidu.com/s/197PUp5jXLnDRnkpr3VfHJw 提取码:87xx 内容简介 · · · · · · 本书不仅适合初级Web开发人员学习阅读,更是Python程序员用来学习高级Web开发技术的优秀参考书. 学习Flask应用的基本结构,编写示例应用: 使用必备的组件,包括模板.数据库.Web表单和电子邮件支持: 使用包和模块构建可伸缩的大型应用: 实现用户认证.角色和个人资料: 在博客网站中重用模板.

python之sqlalchemy

python之sqlalchemy ORM: ORM框架的作用就是把数据库表的一行记录与一个对象互相做自动转换. 正确使用ORM的前提是了解关系数据库的原理. ORM就是把数据库表的行与相应的对象建立关联,互相转换. 由于关系数据库的多个表还可以用外键实现一对多.多对多等关联,相应地, ORM框架也可以提供两个对象之间的一对多.多对多等功能. 一 单表操作(不涉及一对多,多对多) #coding:utf8 import sqlalchemy from sqlalchemy import crea