SqlAlchemy

SQLAlchemy是Python编程语言下的一款开源软件。提供了SQL工具包及对象关系映射(ORM)工具,使用MIT许可证发行。
SQLAlchemy“采用简单的Python语言,为高效和高性能的数据库访问设计,实现了完整的企业级持久模型”。SQLAlchemy的理念是,SQL数据库的量级和性能重要于对象集合;而对象集合的抽象又重要于表和行。因此,SQLAlchemy采用了类似于JavaHibernate的数据映射模型,而不是其他ORM框架采用的Active Record模型。不过,Elixir和declarative等可选插件可以让用户使用声明语法。
 

一、SqlAlchemy例子

安装:

pip install flask-SQLAlchemy

SqlAlchemy官方地址:https://flask-sqlalchemy.palletsprojects.com/en/2.x/quickstart/

配置数据库参考地址:https://docs.sqlalchemy.org/en/14/core/engines.html

from flask import Flask
from flask_sqlalchemy import SQLAlchemy app = Flask(__name__)
# 配置数据库详细信息
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://scott:tiger@localhost/foo'
# 初始化一个db
db = SQLAlchemy(app) # 使用db. 可以让类映射到数据库中的表
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True, nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False) def __repr__(self):
return '<User %r>' % self.username

解析配置数据库详细信息:mysql+pymysql://scott:tiger@localhost/foo

【mysql】:使用的mysql数据库

【pymysql】:使用pymysql的引擎

【://scott】:数据库用户名

【:tiger】:数据库密码

【@localhost】:数据库地址

【/foo】:数据库的库名称

二、创建数据库

1、新建数据库

字符集选择utf8mb4,排序规则可不选自动生成如图。

2、创建用户

填写用户信息并保存

3、设置用户权限

选择新创建的数据库,并配置所有权限

三、数据库互联

官网:https://flask-sqlalchemy.palletsprojects.com/en/2.x/quickstart/

1、创建表和删除表

因为用的pymysql引擎,所以需要先进行安装:

pip install pymysql

执行代码:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy app = Flask(__name__)
# 配置数据库详细信息
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:1234567@localhost:8881/2022.8.3Data'
# 初始化一个db
db = SQLAlchemy(app) # 使用db. 可以让类映射到数据库中的表
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
username = db.Column(db.String(80), unique=True, nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False) def __repr__(self):
return '<User %r>' % self.username if __name__ == '__main__':
# 强制删除表
db.drop_all()
# 创建表的方法
db.create_all()

2、表中插入数据

data = User(id='1', username='测试1', email='123@qq.com', email2='569@qq.com')
sessionData = db.session
sessionData.add(data)
sessionData.commit()

完整代码:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy app = Flask(__name__)
# 配置数据库详细信息
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:1234567@localhost:8881/2022.8.3Data'
# 初始化一个db
db = SQLAlchemy(app) # 使用db. 可以让类映射到数据库中的表
class User(db.Model):
# 以下字段代码数据库中的表头
# db.Integer是整型,primary_key代表主键,唯一标识是数据库的身份证
id = db.Column(db.Integer, primary_key=True)
# db.String(80),代表80个字符的字符串,unique代表不是唯一,nullable=False,代表必填项
username = db.Column(db.String(80), unique=True, nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False)
email2 = db.Column(db.String(120), unique=True, nullable=False) def __repr__(self):
return '<User %r>' % self.username class Task(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(80), unique=True, nullable=False) if __name__ == '__main__':
# 强制删表
db.drop_all()
# 创建表的方法
db.create_all() # 在远程数据库中创建表
# 实例化User表
data = User(id='1', username='测试1', email='123@qq.com', email2='569@qq.com')
sessionData = db.session
sessionData.add(data)
sessionData.commit()

批量插入数据库数据:

    # 在远程数据库表中创建数据
# 实例化User表
for i in range(1, 21):
data = User(username=f'测试{i}', email=f'123{i}@qq.com', email2=f'456{i}@qq.com') sessionData = db.session
# 把类添加到sqlalchemy中
sessionData.add(data)
# 把操作提交
sessionData.commit()

3、查询数据

User.query.filter_by(username='XXX').first()

User.query.all()

完整代码:

from flask import Flask
from flask_sqlalchemy import SQLAlchemy app = Flask(__name__)
# 配置数据库详细信息
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://root:1234567@localhost:8881/2022.8.3Data'
# 初始化一个db
db = SQLAlchemy(app) # 使用db. 可以让类映射到数据库中的表
class User(db.Model):
# 以下字段代码数据库中的表头
# db.Integer是整型,primary_key代表主键,唯一标识是数据库的身份证
id = db.Column(db.Integer, primary_key=True)
# db.String(80),代表80个字符的字符串,unique=Ture代表不是唯一,nullable=False,代表必填项
username = db.Column(db.String(80), unique=True, nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False)
email2 = db.Column(db.String(120), unique=True, nullable=False) def __repr__(self):
# return '<User %r %r>' % (self.username,self.email)
# return '<User {} {}>'.format(self.username,self.email)
return f'<User {self.username} {self.email}>' class Task(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(80), unique=True, nullable=False) if __name__ == '__main__':
# 强制删表
db.drop_all()
# 创建表的方法
db.create_all() # 在远程数据库表中创建数据
# 实例化User表
for i in range(1, 21):
data = User(username=f'测试{i}', email=f'123{i}@qq.com', email2=f'456{i}@qq.com') sessionData = db.session
# 把类添加到sqlalchemy中
sessionData.add(data)
# 把操作提交
sessionData.commit() # 查询数据
# 在表中查询数据,使用User.query
# first获取第一个结果
result = User.query.filter_by(username='测试1').first()
# 查询所有数据
result = User.query.all()
print(result)

查询一组元素中的指定元素:

result = User.query.all()
result = [i for i in result if '9' in i.username]
print(result)

4、更新数据

# 更新数据
# 筛查要修改的数据,然后对表数据进行修改,最后再提交
data = User.query.filter_by(username='测试11').first()
data.email = 'AAAAA@qq.com'
db.session.commit()

5、删除数据

    # 删除数据
data = User.query.filter_by(username='测试20').first()
session = db.session
session.delete(data)
session.commit()

四、自动化平台系列文章汇总

【测试平台开发】——开篇章节

【测试平台开发】——05Flask后端api开发实战(二)—— SqlAlchemy的更多相关文章

  1. 从零开始学习 asp.net core 2.1 web api 后端api基础框架(二)-创建项目

    原文:从零开始学习 asp.net core 2.1 web api 后端api基础框架(二)-创建项目 版权声明:本文为博主原创文章,未经博主允许不得转载. https://blog.csdn.ne ...

  2. teprunner测试平台用例前置模块开发

    本文开发内容 现在正式进入测试相关功能开发.teprunner测试平台底层是pytest,中间层是tep,还没了解的朋友可以先看看tep的文章,整个平台的设计思路和后面用例的执行都会基于这个工具.te ...

  3. 高效的后端API开发模板-illuminant

    概要 整体介绍 补充说明 Q. 有了 prisma 自动生成的 graphql 接口, 为什么还要 rest 接口和 websocket 接口? Q. 为什么要通过 illuminant 加一层反向代 ...

  4. django 开发之前后端分离开发模式

    1. 什么是前后端分离开发的概念: 前端页面运行前端服务器上,负责页面的渲染(静态文件的加载)与跳转 后端代码运行在后端服务器上, 负责数据的处理(提供数据请求的接口) 2. 前后端分离开发碰到的问题 ...

  5. AutoCAD二次开发——AutoCAD.NET API开发环境搭建

    AutoCAD二次开发工具:1986年AutoLisp,1989年ADS,1990年DCL,1993年ADS-RX,1995年ObjectARX,1996年Active X Automation(CO ...

  6. spring boot + vue + element-ui全栈开发入门——前后端整合开发

    一.配置 思路是通过node的跨域配置来调用spring boot的rest api. 修改config\index.js文件,设置跨域配置proxyTable: proxyTable: { '/ap ...

  7. java开发-前后端分离

    众所周知,做java开发是后端的开发,我们时常与前端打交道,但更加注重后端代码的实现,前台的页面都是由前端开发人员做的,那么,是怎么做到前后端分离的呢? 首先,是后端的开发, 在mapper层:Stu ...

  8. Google maps API开发

    原文:Google maps API开发 Google maps API开发(一) 最近做一个小东西用到google map,突击了一下,收获不小,把自己学习的一些小例子记录下来吧 一.加载Googl ...

  9. java EE技术体系——CLF平台API开发注意事项(4)——API生命周期治理简单说明

    文档说明 截止日期:20170905,作者:何红霞,联系方式:QQ1028335395.邮箱:hehongxia626@163.com 综述 有幸加入到javaEE技术体系的研究与开发,也得益于大家的 ...

  10. [转] 前后端分离开发模式的 mock 平台预研

    引入 mock(模拟): 是在项目测试中,对项目外部或不容易获取的对象/接口,用一个虚拟的对象/接口来模拟,以便测试. 背景 前后端分离 前后端仅仅通过异步接口(AJAX/JSONP)来编程 前后端都 ...

随机推荐

  1. Ubuntu20.04之Nvidia驱动安装

    参考:https://blog.csdn.net/xiaokedou_hust/article/details/82187860,实际操作时和该博文有些出入,故作优化. s1.连接wifi,打开终端. ...

  2. python3 安装pyodbc失败 pip3 install pyodbc

    python3 安装pyodbc失败 报错1: 关键报错信息: fatal error: sql.h: No such file or directory  [root@centfos python3 ...

  3. 虽然说自己是个废物,但年纪轻轻就有了120w

  4. Ubuntu下的LabVIEW开发

    1 虚拟机的安装 我用的是Virtua Box 的虚拟机,当然也有其他的类似软件:下载虚拟机的网址: https://www.virtualbox.org/wiki/Downloads 自行去下载合适 ...

  5. IstioCon 回顾 | 网易数帆的 Istio 推送性能优化经验

    在 IstioCon2022 上,网易数帆资深架构师方志恒从企业生产落地实践的视角分享了多年 Istio 实践经验,介绍了 Istio 数据模型,xDS 和 Istio 推送的关系,网易数帆遇到的性能 ...

  6. Git 清除缓存账密

    [已解决] git push 报错:git: 'credential-manager' is not a git command. See 'git --help'. 解决方案1)运行 git con ...

  7. 微信小程序热门选题

    一.大体实现思路 微信小程序,现在是非常热门的,基于微信生态开发的.现在很多计算机毕业的同学,都会选择微信小程序作为毕业设计 小程序端通常都是展示数据给用户去看的,大多数情况下,这些数据不是写死的,而 ...

  8. oeasy教您玩转vim - 26 - 缩进设置

    ​ 缩进设置 回忆上节课内容 这次了解了颜色的细节 设置 256 色模式 :set t_Co=256 然后确定了具体的各种颜色 还可以生成网页 :TOhtml 还有什么好玩的么? ​ 缩进设置 ​ 在 ...

  9. oeasy教您玩转vim - 31 - # 文字区块

    ​ 文字区块 回忆上节课内容 上上次讲的翻页 上次先让屏幕位置固定,移动光标 H- Head 移动到屏幕的顶端 M- Middle 移动到屏幕的中间 L- Low 移动到屏幕的底部 然后让光标固定,移 ...

  10. oeasy教您玩转python - 003 - # - 继续运行

    ​ 继续运行 回忆上次内容 在解释器里玩耍 print("Hello World") 1+1 编写了 py 文件 运行了 py 文件 这次我们继续丰富这个文件 分析 py 文件 我 ...