flask mysql orm,flask的orm框架(Flask-SQLAlchemy)-创建表

标签:

# 转载请留言联系

ORM 是什么?

ORM,Object-Relation Mapping。意思就是对象-关系映射。ORM 主要实现模型对象到关系数据库数据的映射。

604765a8c9510326d8bb92e37ef5f9b7.png

优点 :

只需要面向对象编程, 不需要面向数据库编写代码.

对数据库的操作都转化成对类属性和方法的操作.

不用编写各种数据库的sql语句.

实现了数据模型与数据库的解耦, 屏蔽了不同数据库操作上的差异.

不在关注用的是mysql、oracle...等.

通过简单的配置就可以轻松更换数据库, 而不需要修改代码.

缺点 :

相比较直接使用SQL语句操作数据库,有性能损失.

根据对象的操作转换成SQL语句,根据查询的结果转化成对象, 在映射过程中有性能损失.

Flask-SQLAlchemy的安装

SQLAlchemy是一个关系型数据库框架,它提供了高层的 ORM 和底层的原生数据库的操作。flask-sqlalchemy 是一个简化了 SQLAlchemy 操作的 flask 扩展。

安装 flask-sqlalchemy

pip3 install flask-sqlalchemy

如果连接的是 mysql 数据库,需要安装 mysqldb 驱动

pip3 install flask-mysqldb

如果第二步安装出现错误,一般是没有安装 libmysqld-dev 造成的

sudo apt-get install libmysqld-dev

Flask-SQLAlchemy 连接数据库以及创建表

from flask import Flask

from flask_sqlalchemy import SQLAlchemy

app=Flask(__name__)

# 连接数据库

app.config['SQLALCHEMY_DATABASE_URI'] = '数据库类型://数据库用户名:数据库密码@数据库地址:数据库端口/数据库名字'

# 设置是否跟踪数据库的修改情况,一般不跟踪

app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False

# 数据库操作时是否显示原始SQL语句,一般都是打开的,因为我们后台要日志

app.config['SQLALCHEMY_ECHO'] = True

# 实例化orm框架的操作对象,后续数据库操作,都要基于操作对象来完成

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():

return "hello"

if __name__ == '__main__':

db.create_all() # 创建当前应用中声明的所有模型类对应的数据表,db.drop_all()是删除表

app.run(debug=True)

数据库的其他配置

名字备注

SQLALCHEMY_DATABASE_URI

用于连接的数据库 URI 。例如:sqlite:tmp/test.dbmysql://username:password@server/db

SQLALCHEMY_BINDS

一个映射 binds 到连接 URI 的字典。更多 binds 的信息见用 Binds 操作多个数据库。

SQLALCHEMY_ECHO

如果设置为Ture, SQLAlchemy 会记录所有 发给 stderr 的语句,这对调试有用。(打印sql语句)

SQLALCHEMY_RECORD_QUERIES

可以用于显式地禁用或启用查询记录。查询记录 在调试或测试模式自动启用。更多信息见get_debug_queries()。

SQLALCHEMY_NATIVE_UNICODE

可以用于显式禁用原生 unicode 支持。当使用 不合适的指定无编码的数据库默认值时,这对于 一些数据库适配器是必须的(比如 Ubuntu 上 某些版本的 PostgreSQL )。

SQLALCHEMY_POOL_SIZE

数据库连接池的大小。默认是引擎默认值(通常 是 5 )

SQLALCHEMY_POOL_TIMEOUT

设定连接池的连接超时时间。默认是 10 。

SQLALCHEMY_POOL_RECYCLE

多少秒后自动回收连接。这对 MySQL 是必要的, 它默认移除闲置多于 8 小时的连接。注意如果 使用了 MySQL , Flask-SQLALchemy 自动设定 这个值为 2 小时。

连接其他数据库

完整连接 URI 列表请跳转到 SQLAlchemy 下面的文档 (Supported Databases) 。

常用的SQLAlchemy字段类型

类型名python中类型说明

Integer

int

普通整数,一般是32位

SmallInteger

int

取值范围小的整数,一般是16位

BigInteger

int或long

不限制精度的整数

Float

float

浮点数

Numeric

decimal.Decimal

普通整数,一般是32位

String

str

变长字符串

Text

str

变长字符串,对较长或不限长度的字符串做了优化

Unicode

unicode

变长Unicode字符串

UnicodeText

unicode

变长Unicode字符串,对较长或不限长度的字符串做了优化

Boolean

bool

布尔值

Date

datetime.date

时间

Time

datetime.datetime

日期和时间

LargeBinary

str

二进制文件

常用的SQLAlchemy列选项

选项名说明

primary_key

如果为True,代表表的主键

unique

如果为True,代表这列不允许出现重复的值

index

如果为True,为这列创建索引,提高查询效率

nullable

如果为True,允许有空值,如果为False,不允许有空值

default

为这列定义默认值

标签:

来源: https://www.cnblogs.com/chichung/p/9782919.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/528218.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

php+使用go编译,golang如何编译

Go语言中使用 go build 命令主要用于编译代码。在包的编译过程中,若有必要,会同时编译与之相关联的包。go build 有很多种编译方法,如无参数编译、文件列表编译、指定包编译等,使用这些方法都可以输出可执行文件。go build 无参数…

oracle19c监听服务启动失败,Oracle19c安装(有失败成功记录)

Oracle19c安装(有失败成功记录)失败过程失败安装设置 (图为安装成功后获取)成功过程安装设置配置监听桌面类与服务器类的区别总结说明:失败过程失败问题一模一样,无论安装成功或者失败都出现“无法添加用户XXXX到%2%组中”的弹窗,都是点6下继…

linux ospf 命令,OSPF单区域配置 - linuxprobe2020的个人空间 - OSCHINA - 中文开源技术交流社区...

为了弥补距离矢量路由协议的不足,IEFI组织开发了一种基于链路状态的内部网关协议OSPF实验环境:红,绿,蓝三个颜色区域代表三个不同网络的办公场所,要求使用OSPF协议实现网络互通。pc1:172.16.1.1pc2:172.16.2.1pc3:172.…

ubuntu下的linux怎样备份文件,Ubuntu系统如何备份还原?Ubuntu系统备份还原教程

Ubuntu系统如何备份还原?Ubuntu系统是一个以桌面应用为主的开源操作系统,专为开发团队而打造!无论你使用的是什么操作系统,都有可能出现电脑无法修复的故障,这时候备份还原功能就显得非常重要了。今天小编要给大家分享…

jenkins linux编译c,【Linux】【Jenkins】代码编译和执行过程中的问题汇总

1.问题1:java.io.FileNotFoundException: /root/.jenkins/workspace/Videoyi_AutoTest_Maven/config-log4j\log4j.xml (No such file or directory)该问题是由于代码是在windows下编写和编译的,使用的都是\\来实现目录结构的,结果到linux下的…

linux清理整个磁盘空间,一次Linux磁盘空间清理的经历

最近,在Linux上运行BPM应用总是报没有空间的错误。经过一番调查和周折,终于找出了问题的症结,并顺利解决。今天,我把过程总结一下,方便自己或其他有类似问题的朋友参考。这里不对具体命令的具体各种参数做深入介绍&…

c语言手游常用代码,c语言源代码【操作流程】

很多小伙伴都遇到过c语言源代码的困惑吧,一些朋友看过网上零散的c语言源代码的处理方法,并没有完完全全明白c语言源代码是如何解决的,今天小编准备了简单的解决办法,只需要按照1:编写C源代码for_learning_compile.c2&a…

pdxp协议 C语言,集成CC控制逻辑,PD协议及MCU的Type-C应用方案

Type-C系列亮点介绍内包MCU、集成CC逻辑和DP协议支持Typec DP Alt mode 和单独的DP输入支持速率最高可达4-lane 5.4Gbps(HBR2)支持macbook2016版本,拔掉adapter不掉电● DP1.2/Type C转HDMI1.4,支持HDCP1.3,可扩展PD,USB3.0接口● 支持1/2/4 lane DP输…

Android打开谷歌应用,谷歌确认 Android 12 新增剪贴板访问提醒,将在 Beta 2 上线

IT之家 5 月 19 日消息 据外媒 xda-developers 报道,近年来,谷歌一直在打击 Android 系统中的剪贴板访问,并在发布 Android 10 时禁止后台应用读取剪贴板数据。在最新的 Android 12 中,谷歌引入了一项设置,每当应用访问…

Android nfc编译,【Android编译】各个模块编译方法

一、如何编译出vendor.img1. 首先找到产品对应BoardConfig.mk路径:LINUX/android/device/项目/产品/BoardConfig.mk2. 修改BoardConfig.mk设置下面代码中的ENABLE_VENDOR_IMAGE为true。#Enable split vendor imageENABLE_VENDOR_IMAGE : true#ENABLE_VENDOR_IMAGE :…

android7.0 蓝牙定位,BluetoothAdapter在Android6.0/7.0+以上startDiscovery不能发现蓝牙设备问题...

BluetoothAdapter在Android6.0以上startDiscovery不能发现蓝牙设备问题问题的重要原因之一是Android 6.0,Android 7.0的权限问题引起的。在Android 4.0上运行良好的蓝牙代码,在高版本运行异常。比如BluetoothAdapter的startDiscovery虽然启动了发现蓝牙任…

19年的华为手机还能搭载鸿蒙吗,2019年华为手机出货或超2.15亿部 鸿蒙系统最快10月首秀...

科客点评:备用方案可以说是越多越好,这样的确能有效避免突发事件所带来的巨大风险。6月13日,知名分析师郭明錤给出了有关华为的最新预测报告,该预测报告主要对华为手机今年的出货量进行了预测。根据分析师郭明錤的报告显示&#x…

html5如何新建定义站点,HTML5技术教程:创建新作品_HTML5教程_创建作品_添加元素_课课家...

我们所熟知的HTM5软件是一款非常强大功能的软件,据我了解HTM5软件的特色也是非常有优势的。我们先来介绍一下它的优势:HTML5可以提供:①:提高可用性和改进用户的友好体验;②:有几个新的标签,这将有主(助?)开发人员定义…

app inventor HTML5,[App Inventor] Web客戶端元件 POST 傳值的使用方式

過去在開發App時,Web客戶端元件大部份都以Get的方式進行值的傳遞。那可以用POST嗎?以下簡單的範例,我們將使用Web客戶端元件以POST的方式傳值給一個PHP程式,然後再返回結果顯示在App中。1. 如下圖我們新增一個專案,在工…

html安卓手机打开后只有半屏,宽度设置100%在移动端时变成一半

html代码:手机电脑DIY数码外设智能css代码:.nav-body{position: relative;overflow: hidden;width:100%;height: 400px;}.nav-img{position: absolute;z-index:-1;}.nav-img a{display: block;width:100%;}.nav-img img{height: 400px;width:100%;min-wi…

学计算机U盘内存,在U盘上设置虚拟内存

Zhenbo问答网络江湖小溪饭男人,是的,但是没有。VISTA可以使用U盘来提高性能的原因,必须首先了解3233363533e58685e5aeb9337。这种称为readyboost的技术不使用闪存作为内存,而只是一种加速硬盘读取的技术。硬盘在大容量存储和传输速…

手机uc新窗口打开的html标签,在电脑UC浏览器的新窗口页中如何打开书签

在电脑UC浏览器的新窗口页中如何打开书签UC浏览器是一个很不错的查询资料的软件,我们可以在UC浏览器的新标签页中打开书签,那么如何打开呢?小编就来为大家介绍一下吧。具体如下:1. 第一步,双击并打开UC浏览器软件。2. …

html5版堆糖,堆糖(Duitang)

堆糖的开发背景对于每天都要和互联网打交道的用户来说,在使用Chrome的过程中会遇到很多很多有用的内容,或是一篇文章或是一张图片,用户如果想要保存这些内容大部分都是直接下载到本地进行保存,但是随着电脑保存的内容越来越多&…

如何用计算机直接做工资表,超简单一招!用Excel十秒快速制作工资条

年中到了,财务部的同志们又该挠头了吧。现在很多企业都在使用excel做工资表。不过正如你所知道的,做好的工资表与发出的工资条之间总是少了一样很重要的东东——表头。为了搞定这个表头,各路大神可谓各显神通,比如有的用公式搞定&…

计算机数字媒体专业毕业论文,数字媒体艺术专业毕业论文

数字媒体艺术专业毕业论文简介:此栏目为数字媒体艺术和毕业论文和专业相关的范例,免费教你怎么写视觉传达设计专业考研提供有关参考文献资料。一、引言在社会经济不断发展的今天,人们对自身精神文化越来越重视,数字媒体艺术也得到了迅速发展,…