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. BigCodeBench: 继 HumanEval 之后的新一代代码生成测试基准

    HumanEval 是一个用于评估大型语言模型 (LLM) 在代码生成任务中的参考基准,因为它使得对紧凑的函数级代码片段的评估变得容易.然而,关于其在评估 LLM 编程能力方面的有效性越来越多的担忧, ...

  2. 2.3T NPU强势登场!NXP i.MX 8M Plus开启工业新篇章,14纳米!

                    更多产品详情以及购买咨询 可添加如下客服人员微信 (即刻添加,马上咨询) 更多i.MX 8M Plus产品资料 可长按二维码识别下载 如需选购,请登录创龙科技天猫旗舰店 ...

  3. gdb 根据c语言二进制文件进程号查看内部多线程任务

    C语言二进制文件 a 编译时添加了 -g (gdb 调试), 但是 gdb a 这种方式有时不容易复现一些场景.这时可以先正常启动 a, 然后根据 a 的进程号启动gdb调试. # 1. 找到程序进程 ...

  4. SpringBoot实现RequestBodyAdvice和ResponseBodyAdvice接口

    Spring Boot 提供了一种机制,允许开发者在请求体(RequestBody)和响应体(ResponseBody)被处理之前和之后执行自定义逻辑.这通过 RequestBodyAdvice 和 ...

  5. Spring手动获取bean的四种方式

    一.实现BeanFactoryPostProcessor接口 @Component public class SpringUtil implements BeanFactoryPostProcesso ...

  6. 委托之Action与Func

    1 例程代码: using System; using System.Collections.Generic; using System.Linq; using System.Text; using ...

  7. 用ssh同时push 项目到github和gitee的方法

    ​ 分别为两个网站声称pubkey cd ./ssh ssh-keygen -t rsa -C "oeasy@oeasy.org" -f "github_id_rsa&q ...

  8. Known框架实战演练——进销存数据结构

    系统主要包含商品信息.商业伙伴(客户.供应商)信息.业务单表头信息.业务单表体信息.对账单表头信息.对账单表体信息. 1. 商品信息(JxGoods) 该表用于存储公司商品信息. 名称 代码 类型 长 ...

  9. 初读nginx.conf

    学成在线里教的部署门户,记录一下NGINX的部分配置是如何使用的 location块用于定义如何处理不同URL请求 1.代理: server { listen 80; server_name file ...

  10. Jmeter调试取样器

    调试取样器(Debug Sampler),生成一个包含JMeter变量或属性值的样本,并且这些值可以在组件[查看结果树]的响应窗格中看到 组件路径:线程组->右键添加->取样器->D ...