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,一经查实,立即删除!

相关文章

Java引入依赖aar,如何将JAR依赖项包含到AAR库中

摘要:我有一个依赖于JAR文件的AAR文件,当我构建AAR项目时,它不包含JAR代码。细节:我有一个Java SDK库项目,其中包含我们用于JavaWeb项目的代码,此类库是使用Gradle内部Nexus服务器(如JAR)创建的&#xff0c…

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

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

php document.getel,javascript 密码强弱度检测万能插件_javascript技巧

网页密码强弱度检测请输入密码弱中强所需JS下载//checkpwd.js////*Author Netcent Aquany//*function GEId(sID){try{return document.getElementById(sID)}catch(e){};}function GetEl(szN){try{return document.getElementsByName(szN)[0]}catch(e){};}function GetElCol(szN…

session丢失php,PHP Session丢失无效问题总结

前两天玩了一下云边的轻博客,觉得东西比较小巧,自己也想弄个东西,就直接放到服务器里装了,结果啊,$_SESSION丢失了好几天~情况描述:$_SESSION只能在当前的访问里有效,第二次请求就像之前执行过一样,$_SESSION里的内容会没了,就一个array();下面是我对这个问题的查找…

转码java,java转码

媒体处理 MPC媒体处理(Media Processing Center)为海量多媒体数据提供经济、高效、弹性的转码和音视频处理服务,支持丰富的转码格式,适合在PC、TV以及移动终端上播放,匹配多种商业场景媒体处理媒体处理(Media Processing Center)为海量多媒体…

archives_do.php,织梦后台文章管理中增加批量添加tag标签功能

需求背景: 之前发布了不少文章,后来发现之前的这些文章当时发布时都没有添加tag标签,然而现在需要都添加上tag标签,然而这个在默认的织梦后台是没办法批量实现的,只能一篇篇文章去修改。思考: 织梦原本的文…

php ioc容器,PHP 在Swoole中使用双IoC容器实现无污染的依赖注入

容器(container)技术(可以理解为全局的工厂方法), 已经是现代项目的标配. 基于容器, 可以进一步实现控制反转, 依赖注入. Laravel 的巨大成功就是构建在它非常强大的IoC容器 illuminate/container 基础上的. 而 PSR-11 定义了标准的 container , 让更多的 PHP 项目依赖容器实现…

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

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

oracle立即关闭数据库,Oracle数据库的起步和关闭

Oracle数据库的启动和关闭要启动和关闭数据库,必须要以具有Oracle 管理员权限的用户登陆,通常也就是以具有SYSDBA权限的用户登陆,启动一个数据库需要三个步骤:1、 创建一个Oracle实例(非安装阶段)2、 由实例安装数据库(安装阶段)3、 打开数据…

oracle空例程,2018.5.29 Oracle连接到空闲例程

解决方法如下:1、通过cmd命令窗启动Oracle:(最好是以管理员身份启动)C:\Users\Administrator>sqlplus /nologSQL>conn /as sysdba 或者这种 conncet [email protected] as sysdba //sys是用户名 123456是密码 。 后面的是数据库名字SQL>startup…

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

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

Linux内核权限维持,Linux权限维持笔记

一、修改文件/终端的属性1、修改文件创建时间如果蓝队是按照文件修改时间来判断后门的话,比如现在我们上传一个shell,可以看到shell文件与原文件的时间是不同的解决方法:touch -r teamserver shell.php现在再来看原文件与shell文件的修改时间…

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 cd -目录,linux cd

cd -返回之前的目录cd !$ 把上个命令的参数作为这个命令的参数阅读目录(Content)1.命令格式:cd [目录名]2.命令功能切换当前目录至 [目录名]3. 常用范例1.进入系统根目录命令:cd /说明:进入系统根目录,上面命令执行完后拿ls命令看一下&#x…

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

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

linux6.5 查看分辨率命令,centos6.5跟centos7的top命令中移动查看顺序的指令怎么不一样...

top 命令 移动查看顺序centos6.5 以下 top -ab -n 1按o 按大写字母可以调顺序 大写字母往左 小写往右f,o . Fields/Columns: ‘f’ add or remove; ‘o’ change display orderF or O . Select sort field查看cpu和内存占用排序,可以直接快捷方式但是在centos7中快捷键用大小写…

linux nfs spec,创建 NFS Ubuntu Linux 服务器卷 - Azure Kubernetes Service | Microsoft Docs

您现在访问的是微软AZURE全球版技术文档网站,若需要访问由世纪互联运营的MICROSOFT AZURE中国区技术文档网站,请访问 https://docs.azure.cn.在 Azure Kubernetes 服务 (AKS) 中手动创建和使用 NFS(网络文件系统)Linux 服务器卷4/25/2019本文内容基于容器…

c语言中字符数字加'0',C语言中的NULL与转义字符'\0'以及数值0的关系

以下两种只是一个巧合,只不过地址值的数值为0而已。0本身只不过是一个可以显示的字符,与内存并没有直接关系。在0与ASCII表中关联NULL做了关联,这样使得输入转义字符\0,也可以将一个变量赋值为NULL。而\0对应的ASCII码又是第0号&a…

c语言程序设计杨辉三角过程,C语言编程 打印杨辉三角

在做这道题时首先要观察杨辉三角的规律11 11 2 11 3 3 11 4 3 4 1……可以看出1.每行的数字个数与所处行数相等2.除去每行第一个和最后一个数字唯一,其他数字都等于头顶元素加头顶前一个元素源代码:#include#includevoid PrintY(int length, int array[][100]){int …