Flask数据库之SQLAlchemy--介绍--链接数据库

目录

SQLAlchemy介绍

SQLAlchemy连接数据库 


SQLAlchemy介绍

数据库是一个网站的基础!!!

比如MySQL、MongoDB、SQLite、PostgreSQL等,这里我们以MySQL为例进行讲解。

SQLAlchemy是一个ORM框架

对象关系映射(英语:Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序设计技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。

从效果上说,它其实是创建了一个可在编程语言里使用的“虚拟对象数据库”。


大白话

对象模型与数据库表的映射

为什么要有SQLAlchemy?

随着项目的越来越大,采用写原生SQL的方式在代码中会出现大量重复的SQL语句,那么,问题就出现了:

  1. SQL语句重复利用率不高,越复杂的SQL语句条件越多,代码越长,会出现很多相近的SQL语句
  2. 很多SQL语句 是在业务逻辑中拼接出来的,如果数据库需要更改,就要去修改这些逻辑,这会容易漏掉对某些SQL语句的修改
  3. 写SQL时容易忽略web安全问题,造成隐患

而ORM可以通过类的方式去操作数据库而不用再写原生的SQL语句,通过把映射成,把作为实例(一条数据),把字段作为属性,ORM在执行对象操作的时候最终还是会把对象的操作转换为数据库的原生语句,但使用ORM有许多优点:

  1. 易用性:使用ORM做数据库开发可以有效减少重复SQL语句的概率,写出来的模型也更加直观、清晰
  2. 性能损耗小:ORM转换成底层数据库操作指令确实会有一些开销。但是从实际情况来看,这种性能损耗很少(不足5%),只要不是针对性能有严苛的要求,综合考虑开发效率、代码阅读性,带来的好处远大于性能损耗,而且项目越大作用越明显。
  3. 设计灵活:可以轻松的写出复杂的查询。
  4. 可移植性:SQLAlchemy封装了底层的数据库实现,支持多个关系数据库引擎,包括流行的Mysql、PostgreSQL和SQLite,可以非常轻松的切换数据库。

使用ORM操作数据库将变得非常简单

class Person:name = 'xx'age = 18country ='xx'# Person类 -> 数据库中的一张表
# Person类中的属性  -> 数据库中一张表字段
# Person类的一个对象 -> 数据库中表的一条数据# p = Person('xx',xx)
# p.save()
# insert into table values ('xx',xx)

在操作数据库操作之前,先确保你已经安装了以下软件:

  • mysql

    • 如果是在windows上,到官网下载
  • pymysql:pymysql是用Python来操作mysql的包

    from sqlalchemy import create_engine
    
    pip install pymysql
  • SQLAlchemy:SQLAlchemy是一个数据库的ORM框架,我们在后面会用到。

    pip install SQLAlchemy

SQLAlchemy连接数据库 

首先要引入SQLAlchemy

from sqlalchemy import create_engine

接下来,需要创建一个数据库引擎(engine)对象,它将负责与实际数据库进行通信。引擎对象的创建通常需要指定数据库的连接字符串,该字符串包含了连接数据库所需的信息(如用户名、密码、主机地址等)。

# 例如连接到一个名为'mydatabase'的SQLite数据库
engine = create_engine('sqlite:///mydatabase.db')

如果要连接到其他类型的数据库,连接字符串将有所不同。例如,连接到一个名为'mydatabase'的MySQL数据库: 

engine = create_engine('mysql://username:password@localhost/mydatabase')

 中间为数据库的变量:

def conn_db1():# 数据库的变量HOST = '192.168.30.151' # 127.0.0.1/localhostPORT = 3306DATA_BASE = 'flask_db'USER = 'root'PWD = '123'

一个基本框架:

from sqlalchemy import create_enginedef conn_db1():# 数据库的变量HOST = '192.168.30.151' # 127.0.0.1/localhostPORT = 3306DATA_BASE = 'flask_db'USER = 'root'PWD = '123'# DB_URI = f'数据库的名+驱动名://{USER}:{PWD}@{HOST}:{PORT}/{DATA_BASE}'DB_URI = f'mysql+pymysql://{USER}:{PWD}@{HOST}:{PORT}/{DATA_BASE}'engine = create_engine(DB_URI)# 执行一个SQLsql = 'select 2;'conn = engine.connect()rs = conn.execute(sql)print(rs.fetchone())

逐条代码解释:

 

  1. from sqlalchemy import create_engine: 这行导入了create_engine函数,它是SQLAlchemy提供的用于创建数据库引擎的函数。

  2. def conn_db1():: 这是一个Python函数的定义,函数名为conn_db1

  3. 下面的一系列变量定义了连接到数据库所需的信息,包括主机地址(HOST)、端口号(PORT)、数据库名(DATA_BASE)、用户名(USER)和密码(PWD)。

  4. DB_URI = f'mysql+pymysql://{USER}:{PWD}@{HOST}:{PORT}/{DATA_BASE}': 这行代码构建了一个数据库连接字符串(DB_URI),它包括了数据库类型(mysql)、用户名、密码、主机地址、端口号以及数据库名。

  5. engine = create_engine(DB_URI): 这行代码使用create_engine函数创建了一个数据库引擎(engine),该引擎将用于与数据库进行交互。

  6. sql = 'select 2;': 这行代码定义了一个简单的SQL查询语句,它将返回数字2。

  7. conn = engine.connect(): 这行代码使用数据库引擎建立了一个连接(conn)。

  8. rs = conn.execute(sql): 这行代码使用连接执行了之前定义的SQL查询语句,并将结果赋给了变量rs

  9. print(rs.fetchone()): 这行代码使用fetchone()方法从查询结果中获取了一行数据,并将其打印出来。

 

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

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

相关文章

GoAccess实时分析Nginx日志

GoAccess 是一个基于终端的实时 Web 日志分析仪。用 C 语言编写,它是快速,互动的,并以优雅而直观的方式显示日志。它提供了各种 Web 日志文件的支持,包括 Apache,Nginx,Caddy,Amazon S3 和 Clou…

postman-pre-request-scripts使用

一、场景 二、定义模拟接口 using Microsoft.AspNetCore.Authorization; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Mvc; using SaaS.Framework.DataTransfer; using System.Threading.Tasks;namespace SaaS.KDemo.Api.Controllers {[Route("api/[co…

Ubuntu上线一个JAVA环境微服务架构的系统

项目介绍 项目背景: 已经有一套系统,迁移部署到新服务器,并使用不同数据,相同框架,提供对应业务服务 单机测试,从裸机-系统安装-软件架构-部署-数据迁移-发版-上线,整体流程与思路分享,包含后端、数据,测试、网络、运维等相关事务。 项目目的: 部署并迁移系统,…

【QT】Qt的随身笔记(持续更新...)

目录 Qt 获取当前电脑桌面的路径Qt 获取当前程序运行路径Qt 创建新的文本文件txt,并写入内容如何向QPlainTextEdit 写入内容QTimerQMessageBox的使用QLatin1StringQLayoutC在c头文件中写#include类的头文件与直接写class加类名有何区别mutable关键字前向声明 QFontQ…

【数据结构】优先级队列(堆)

文章目录 💐1. 优先级队列1.1 概念 💐2.堆的概念及存储方式2.1 什么是堆2.2 为什么要用完全二叉树描述堆呢?2.3 为什么说堆是在完全二叉树的基础上进行的调整?2.4 使用数组还原完全二叉树 💐3. 堆的常用操作-模拟实现3…

OpenCV实现的F矩阵+RANSAC原理与实践

1 RANSAC 筛选 1.1 大致原理 Random sample consensus (RANSAC),即随机抽样一致性,其是一种用于估计模型参数的迭代方法,特别适用于处理包含离群点(outliers)的数据集 RANSAC 的主要思想是随机采样数据点&#xff0…

ExcelServer EXCEL服务器使用- 用户、角色权限配置

Excel文件服务器搭建 搭建Excel服务器 1、登录 默认 用户名 Admin 密码 3 2、角色管理 添加修改角色 角色配置在 系统管理->角色.fexm文件夹下 可以像修改excel文件一样 修改角色 3、用户管理 添加修改用户 用户的修改在 系统管理->用户.fexm 可以像excel一样编辑用户…

链式二叉树的实现及遍历(C语言版)

目录 1 基本概念 1.1 树的概念 1.2 二叉树的链式表示 1.2.1 "左孩子右兄弟"表示法 1.2.2 "左右子树"表示法 1.2.3 手动构建一棵树 2 树的遍历 2.1 前序遍历/先序遍历 2.2 中序遍历 2.3 后序遍历 2.4 层序遍历 2.4.1 算法思想 ​编辑 2.4.2 带头…

MongoDB基础详解

一、MongoDB概述 MongoDB 是一个基于 分布式文件存储 的开源 NoSQL 数据库系统,由 C 编写的。MongoDB 提供了 面向文档 的存储方式,操作起来比较简单和容易,支持“无模式”的数据建模,可以存储比较复杂的数据类型,是一…

【Linux学习】02Linux基础命令

Linux(B站黑马)学习笔记 01Linux初识与安装 02Linux基础命令 文章目录 Linux(B站黑马)学习笔记前言02Linux基础命令Linux的目录结构Linux命令入门ls命令 目录切换相关命令(cd/pwd)cd命令pwd命令 相对路径、绝对路径和特殊路径符创…

Seata流程源码梳理下篇-TC

我们上篇简单梳理了下TM、RM的一些流程(离现在过得挺久的了,这篇我们这篇来梳理下TC的内容。 TC (Transaction Coordinator) - 事务协调者 维护全局和分支事务的状态,驱动全局事务提交或回滚。 TM (Transaction Manager) - 事务管理器 定…

将本地项目上传至Github详解

目录 1 前言2 本地代码上传2.1 命令行方法2.2 图形界面法2.3 结果 1 前言 GitHub是一个面向开源及私有软件项目的托管平台,因为只支持Git作为唯一的版本库格式进行托管,故名GitHub 。开发者常常将github作为代码管理平台,方便代码存储、版本…

基于SpringBoot的的师生健康信息管理系统

目录 前言 一、技术栈 二、系统功能介绍 管理员功能模块 学生功能模块 教师功能模块 三、核心代码 1、登录模块 2、文件上传模块 3、代码封装 前言 随着移动应用技术的发展,越来越多的用户借助于移动手机、电脑完成生活中的事务,许多的传统行业也…

超级详细 SQL 优化大全

1、MySQL的基本架构 1)MySQL的基础架构图 左边的client可以看成是客户端,客户端有很多,像我们经常你使用的CMD黑窗口,像我们经常用于学习的WorkBench,像企业经常使用的Navicat工具,它们都是一个客户端。右…

北工大汇编题——分支程序设计

题目要求 信息检素程序设计:在数据区,有9个不同的信息,编号 0-8,每个信息包括20 个字符。从键盘接收 0-8 之间的一个编号,然后再屏幕上显示出相应编号的信息内容,按“q”键退出 完整代码 DATAS SEGMENTn0…

Day 03 python学习笔记

位运算 基于二进制的运算(计算机的底层基于位运算) 计算机最小单位:bit (比特/位/二进制) 1byte(字节) 8bit ( 0000 0000) &:与 (全真为真,一假则…

项目开发过程中遇到了什么困难?

1.需求最初是什么样的? 2.如何挖掘的需求,挖掘后真实的需求是什么样的? 3.我们做了那些调查? 4.我们给出了那些方案,优缺点是什么? 5.根据实际情况,老板的期望,最终我们选择的什…

Leetcode 01-算法入门与数组-③数组排序

LeetCode 01-算法入门与数组-③数组排序 一. 冒泡排序 1. 冒泡排序算法思想 冒泡排序(Bubble Sort)基本思想: 经过多次迭代,通过相邻元素之间的比较与交换,使值较小的元素逐步从后面移到前面,值较大的元素…

SAP PO运维(一):系统概览异常处理

打开SAP PIPO Netweaver Administration界面,系统概览下显示异常: 参考SAP note: 2577844 - AS Java Monitoring and Logging parametrization best practice service/protectedwebmethods = SDEFAULT -GetVersionInfo -GetAccessPointList -ListLogFiles -ReadLogFile -Para…

为什么选择Spring Cloud

Spring Cloud与Netflix Netflix是一家做视频网站的公司,之所以要说一下这个公司是因为Spring Cloud在发展之初,Netflix做了很大的贡献。包括服务注册中心Eureka、服务调用Ribbon、Feign,服务容错限流Hystrix、服务网关Zuul等众多组件都是Net…