当前位置: 首页 > news >正文

如何使用Flask-SQLAlchemy来管理数据库连接和操作数据?

首先,我们需要安装Flask-SQLAlchemy。你可以使用pip来安装它,就像这样:

pip install Flask-SQLAlchemy

好了,现在我们已经有了一个可以操作数据库的工具,接下来让我们来看看如何使用它吧!

首先,我们需要创建一个Flask应用对象,并配置数据库的连接字符串和师:

from flask import Flask  
from flask_sqlalchemy import SQLAlchemy  app = Flask(__name__)  
app.config['SQLALCHEMY_DATABASE_URI'] = 'mysql+pymysql://username:password@localhost/mydatabase'  
app.config['SQLALCHEMY_TRACK_MODIFICATIONs'] = False  
db = SQLAlchemy(app)

现在,我们已经创建了一个数据库,接下来让我们来创建一些模型吧!

假设我们想要创建一个用户模型,可以像这样:

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 f'<User {self.username}>'

这个模型定义了一个名为User的表,其中包含id、username和email三个列。注意,我们使用了db.Column来定义每个列,并指定了它们的类型和其他属性。

现在我们已经创建了一个模型,让我们来看看如何操作数据吧!

首先,让我们来看看如何插入数据:

db.create_all()  # 创建所有表  
user1 = User(username='john', email='john@example.com')  
user2 = User(username='mary', email='mary@example.com')  
db.session.add_all([user1, user2])  
db.session.commit()  # 提交更改

这个代码片段创建了两个用户,并将它们添加到数据库中。注意,我们使用db.session来管理所有的更改,并在最后提交更改。

现在我们已经有了一些数据,接下来让我们来看看如何查询数据:

users = User.query.all()  # 查询所有用户  
john = User.query.filter_by(username='john').first()  # 查询名为john的用户

这个代码片段使用User.query来查询所有用户和名为john的用户。注意,我们可以在查询中使用过滤器来筛选数据。

如果我们需要修改或删除数据呢?很简单,让我们来看看:

john.email = 'newemail@example.com'  # 修改用户email地址  
db.session.commit()  # 提交更改  db.session.delete(john)  # 删除用户  
db.session.commit()  # 提交更改

这个代码片段修改了名为john的用户的email地址,并将其从数据库中删除。注意,我们仍然使用db.session来管理所有的更改,并在最后提交更改。

好了,现在你已经知道如何使用Flask-SQLAlchemy来管理数据库连接和操作数据了。如果你还有其他问题,随时向我提问!

假设我们想要创建一个新的模型,名为Post,它包含标题和内容字段。我们可以使用以下代码:

class Post(db.Model):  id = db.Column(db.Integer, primary_key=True)  title = db.Column(db.String(80), unique=False, nullable=False)  content = db.Column(db.Text, unique=False, nullable=True)  def __repr__(self):  return f'<Post {self.title}>'

这个模型定义了一个名为Post的表,其中包含id、title和content三个列。注意,我们使用了db.Column来定义每个列,并指定了它们的类型和其他属性。

现在我们已经创建了一个新的模型,让我们来看看如何将它们关联起来。假设我们想要将用户和帖子关联起来,以便我们能够知道哪些用户发布了哪些帖子。我们可以使用以下代码:

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)  posts = db.relationship('Post', backref='user', lazy='dynamic')  def __repr__(self):  return f'<User {self.username}>'  class Post(db.Model):  id = db.Column(db.Integer, primary_key=True)  title = db.Column(db.String(80), unique=False, nullable=False)  content = db.Column(db.Text, unique=False, nullable=True)  user_id = db.Column(db.Integer, db.ForeignKey('user.id'))  def __repr__(self):  return f'<Post {self.title}>'

在这个代码片段中,我们在User模型中添加了一个名为posts的属性,它使用了db.relationship来关联Post模型。我们还添加了一个名为user_id的列,它将与User模型的id列关联起来。

现在我们已经将用户和帖子关联起来了,让我们来看看如何使用这个关联。假设我们想要获取用户john发布的的所有帖子,我们可以使用以下代码:

john = User.query.filter_by(username='john').first()  
posts = john.posts.all()  
for post in posts:  print(post.title, post.content)

这个代码片段首先获取名为john的用户,然后获取该用户发布的的所有帖子,并逐个打印每个帖子的标题和内容。

希望这些示例代码能够帮助你更好地理解如何使用Flask-SQLAlchemy来管理数据库连接和操作数据。

相关文章:

如何使用Flask-SQLAlchemy来管理数据库连接和操作数据?

首先&#xff0c;我们需要安装Flask-SQLAlchemy。你可以使用pip来安装它&#xff0c;就像这样&#xff1a; pip install Flask-SQLAlchemy好了&#xff0c;现在我们已经有了一个可以操作数据库的工具&#xff0c;接下来让我们来看看如何使用它吧&#xff01; 首先&#xff0c…...

麒麟-飞腾Kylin-V4桌面arm64系统静态编译QT

1.系统具体版本&#xff1a; 2. 因为此版本的源很老了&#xff0c;需要修改版本的源&#xff0c;才能正常更新各种软件&#xff0c;否则&#xff0c;你连麒麟商店都打不开。 sudo vi /etc/apt/sources.list 选择你系统对应版本的源地址&#xff1a; #4.0.2桌面版本: deb ht…...

CentOS 项目发出一篇奇怪的博文

导读最近&#xff0c;在红帽限制其 RHEL 源代码的访问之后&#xff0c;整个社区围绕这件事发生了很多事情。 CentOS 项目发出一篇奇怪的博文 周五&#xff0c;CentOS 项目董事会发出了一篇模糊不清的简短博文&#xff0c;文中称&#xff0c;“发展社区并让人们更容易做出贡献…...

【Mybatis-Plus】or拼接

Mybatis-Plus的or拼接是个坑&#xff1a; 这是需要的结果&#xff1a; queryWrapper.and(c->c.or(a->a.eq("qcs3.status", "SIGNING").eq("qcs.status", "SIGNING")).or(b->b.eq("qcs.status","INVALIDING&q…...

SpringBoot项目部署在Windows与Centos上

文章目录 Windows部署一、github上下载文件winsw二、文件目录三、编辑xml文件四、安装服务五、启动服务六、把jar包放到项目外面七、添加限制内存 Linux部署一、准备二、服务三、操作 Windows部署 windows部署服务借鉴于此篇博文 一、github上下载文件winsw 点击链接下载下图…...

网站服务器出错的原因分析和解决方法

​  网站在日常运行的过程中&#xff0c;难免会遇见一些问题&#xff0c;这次我们就来分析关于网站服务器出错、服务器异常的原因以及如何解决网站服务器错误的方法。 如何知道是网站服务器的问题呢? 只要网站不能正常访问运行&#xff0c;那么一定会反馈相关的错误代码和原…...

电影推荐系统】系统初步搭建及离线个性化推荐

上篇博文我们已经写完统计推荐部分&#xff0c;现在我们将使用VueElement-uiSpringBoot来快速搭建系统&#xff0c;展示出电影&#xff0c;并介绍个性化推荐部分。 1 系统页面设计 初步是想设计一个类似豆瓣电影推荐系统 用户登陆后&#xff0c;可以查看高分电影可以查看推荐…...

Redis 集群 (cluster)

是什么 官网&#xff1a;Redis cluster specification | Redis 由于数据量过大&#xff0c;单个Master复制集难以承担&#xff0c;因此需要对多个复制集进行集群&#xff0c;形成水平扩展每个复制集只负责存储整个数据集的一部分&#xff0c;这就是Redis的集群&#xff0c;其作…...

《吐血整理》进阶系列教程-拿捏Fiddler抓包教程(19)-Fiddler精选插件扩展安装,将你的Fiddler武装到牙齿

1.简介 Fiddler本身的功能其实也已经很强大了&#xff0c;但是Fiddler官方还有很多其他扩展插件功能&#xff0c;可以更好地辅助Fiddler去帮助用户去开发、测试和管理项目上的任务。Fiddler已有的功能已经够我们日常工作中使用了&#xff0c;为了更好的扩展Fiddler&#xff0c…...

解决spring.thymeleaf.cache=false不起作用的问题

目录 spring.thymeleaf.cachefalse不起作用thymeleaf缓存关闭 spring.thymeleaf.cachefalse不起作用 配置是清除缓存&#xff0c;实现热部署。 也就是修改了html后不用重启&#xff0c;刷新页面就能看到效果。 修改完html后一定要ctrlf9重新build一下。 再回到浏览器刷新&…...

企业可以申请DV https证书吗

DV https证书是有基础认证的数字证书&#xff0c;所以DV https证书也可以叫DV基础型https证书。DV基础型https证书是众多https证书中既支持个人&#xff0c;也支持企事业单位申请的https证书&#xff0c;所以企事业单位都可以申请DV基础型https证书&#xff0c;不论是企业门户网…...

记一次phpmyadmin巧妙利用

声明&#xff1a;文中涉及到的技术和工具&#xff0c;仅供学习使用&#xff0c;禁止从事任何非法活动&#xff0c;如因此造成的直接或间接损失&#xff0c;均由使用者自行承担责任。 点点关注不迷路&#xff0c;每周不定时持续分享各种干货。 原文链接&#xff1a;众亦信安&a…...

HTML+CSS+JavaScript:轮播图的自动播放、手动播放、鼠标悬停暂停播放

一、需求 昨天我们做了轮播图的自动播放&#xff0c;即每隔一秒自动切换一次 今天我们增加两个需求&#xff1a; 1、鼠标点击向右按钮&#xff0c;轮播图往后切换一次&#xff1b;鼠标点击向左按钮&#xff0c;轮播图往前切换一次 2、鼠标悬停在轮播图区域中时&#xff0c;…...

微信小程序:生成二维码带参数并获取值

通过后台接口可以获取小程序任意页面的小程序码&#xff0c;需要注意的是接口只能生成已发布的小程序的二维码 小程序接口文档 获取 scene 值 1&#xff09;scene 字段的值会作为 query 参数传递给小程序/小游戏。用户扫描该码进入小程序/小游戏后&#xff0c;开发者可以获取…...

《Java面向对象程序设计》学习笔记——第 3 章 运算符、表达式和语句

专栏&#xff1a;《Java面向对象程序设计》学习笔记...

XML约束和解析

文章目录 概述使用场景语法dtd约束Schema约束解析DOM4j&#xff08;重点&#xff09; 概述 可扩展的标记性语言 使用场景 以前: 传输数据的媒介。 例如&#xff1a;微服务架构中&#xff0c;可以用xml文件进行多语言之间的的联系。 现在: 做配置文件 现在作为传输数据的媒介…...

网络层:IP协议/Mac协议

IP协议 主机: 配有IP地址, 但是不进行路由控制的设备; 路由器: 即配有IP地址, 又能进行路由控制; 节点: 主机和路由器的统 称; IP 目标网络&#xff08;前半部分&#xff09; 目标主机&#xff08;后半部分&#xff09; IP层的核心&#xff1a;IP地址定位主机&#xff08;定…...

让你不在好奇怎么把录音转化成文字更快捷

某天&#xff0c;小琳参加了一场激动人心的讲座&#xff0c;讲座内容非常有价值&#xff0c;但她却发现自己没有时间做详细的笔记。小琳感到非常苦恼&#xff0c;因为她害怕错过任何重要的信息。就在她感到无助的时候&#xff0c;她的好朋友小芳建议她可以借助录音转文字技术来…...

分布式异步任务处理组件(四)

基于zookeeper的HA集群设计思路-- 各个节点都可以消费任务&#xff0c;但是由主节点来投票&#xff1b;主节点通过注册zookeeper的临时节点来选举--主节点需要同步从节点的信息正常工作机制--各个节点&#xff08;包括主节点本身&#xff09;在执行任务之前询问主节点&#xf…...

【C++】做一个飞机空战小游戏(一)——使用getch()函数获得键盘码值

[导读]本系列博文内容链接如下&#xff1a; 【C】做一个飞机空战小游戏(一)——使用getch()函数获得键盘码值 【C】做一个飞机空战小游戏(二)——利用getch()函数实现键盘控制单个字符移动 【C】【C】做一个飞机空战小游戏(三)——模块化程设设计 最近想用c做一个小游戏&#x…...

OpenCore Legacy Patcher终极指南:让老Mac焕发新生的4个简单步骤

OpenCore Legacy Patcher终极指南&#xff1a;让老Mac焕发新生的4个简单步骤 【免费下载链接】OpenCore-Legacy-Patcher Experience macOS just like before 项目地址: https://gitcode.com/GitHub_Trending/op/OpenCore-Legacy-Patcher 还在为你的老Mac无法升级最新mac…...

AI开发环境一键构建:模块化脚本实现基础设施即代码

1. 项目概述&#xff1a;一个为AI工作流量身定制的开发环境构建器如果你和我一样&#xff0c;经常在本地机器、云服务器甚至多台设备之间切换&#xff0c;只为折腾不同的AI模型、跑通某个开源项目&#xff0c;那你一定对“环境配置”这四个字深恶痛绝。今天要聊的这个项目dabyd…...

【职场】职场上,从不发脾气的人,最值得警惕

职场上&#xff0c;从不发脾气的人&#xff0c;最值得警惕“真正危险的人&#xff0c;从来不是那个拍桌子的人。而是那个&#xff0c;永远在微笑的人。”一、你身边有没有这种人 开会的时候&#xff0c;无论发生什么&#xff0c;他都面带微笑。 被否定了&#xff0c;点头&#…...

AP的全称是什么?

AP 的全称是 Access Point。 中文常叫 无线接入点 或 无线 AP&#xff0c;一般指 Wi‑Fi 路由器 / 热点 里负责 让手机、笔记本、POS 等无线接入局域网 的那一部分&#xff08;有时也整台设备被口语叫成 AP&#xff09;。 在你们文档里 「Connect the LAN port … to an AP r…...

基于ChatGee框架的KakaoTalk ChatGPT机器人部署与定制指南

1. 项目概述&#xff1a;一个为KakaoTalk量身定制的ChatGPT机器人 如果你在韩国工作、生活&#xff0c;或者你的用户群体主要在韩国&#xff0c;那么KakaoTalk&#xff08;카카오톡&#xff09;这款国民级即时通讯应用&#xff0c;你一定不陌生。它几乎覆盖了韩国所有的智能手…...

5个实用技巧解决AKShare金融数据接口的HTTP API调用问题

5个实用技巧解决AKShare金融数据接口的HTTP API调用问题 【免费下载链接】aktools AKTools is an elegant and simple HTTP API library for AKShare, built for AKSharers! 项目地址: https://gitcode.com/gh_mirrors/ak/aktools 在量化投资和金融数据分析领域&#xf…...

打磨与展望:RAG 的进阶技巧与避坑指南

走过了从加载文档到完整问答链的全程&#xff0c;恭喜你——你已经亲手建造出了一台可以和自己文档“对话”的 RAG 引擎。但任何一个上过生产环境的开发者都知道&#xff1a;原型和产品之间&#xff0c;往往隔着一条名为“细节”的护城河。 用户开始提各种刁钻问题&#xff0c;…...

优化sVLM 的计算效率:轻量级注意力机制

在 sVLM 中&#xff0c;轻量级注意力机制的核心目标不是简单把模型做小&#xff0c;而是减少多模态推理中最贵的部分&#xff1a; 1. 视觉 token 太多 2. 图像 token 进入 LLM 后参与自注意力 3. 自注意力复杂度随序列长度近似 O(N) 4. 小模型虽然参数少&#xff0c;但视觉 tok…...

智能体化提示工程:从静态指令到动态协作的AI应用范式

1. 项目概述&#xff1a;从“提示词”到“智能体”的范式跃迁如果你和我一样&#xff0c;在过去一两年里深度使用过各类大语言模型&#xff0c;那你一定经历过这样的场景&#xff1a;为了完成一个稍微复杂的任务&#xff0c;比如写一份市场分析报告&#xff0c;你需要反复和模型…...

别再死记硬背了!用MATLAB的`strel`函数玩转形态学:从结构元素选择到开闭运算除噪

别再死记硬背了&#xff01;用MATLAB的strel函数玩转形态学&#xff1a;从结构元素选择到开闭运算除噪 在数字图像处理的学习过程中&#xff0c;很多初学者都会陷入一个误区&#xff1a;机械地记忆膨胀、腐蚀、开运算、闭运算的定义&#xff0c;却忽略了形态学操作中最关键的一…...