如何使用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来管理数据库连接和操作数据。

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

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

相关文章

前端接收后端返回换行符 /n 不生效

问题&#xff1a;前端接收后端返回换行符 /n 不换行、不生效 解决方案&#xff1a; 一、 设置css的white-space属性 <div class"text-container">{{ text }}</div>export default {data() {return {text: 这是第一行\n这是第二行,};}, };<style sco…

php-golang-rpc 简单的jsonrpc实践

golang代码&#xff1a; package main import ( "net" "net/rpc" "net/rpc/jsonrpc" ) type App struct{} type Res struct { Code int json:"code" Msg string json:"msg" Data any json:"data" } fun…

Qu‘est-ce Que C‘est? 2023牛客暑期多校训练营4-J

登录—专业IT笔试面试备考平台_牛客网 题目大意&#xff1a;求满足如下条件的长度为n的数组数量&#xff1a;所有数字的范围在-m~m之间&#xff0c;任意连续的元素数量>1的区间的的区间和>0 1<n,m<5000; 思路&#xff1a;要让所有区间元素和>0&#xff0c; 我…

上门居家养老小程序社区养老小程序开发方案详解

居家养老管理社区养老小程序有哪些功能呢&#xff1f; 1.选择养老服务类型 医疗护理&#xff0c;家政服务预约&#xff0c;上门助浴、上门做饭&#xff0c;上门助餐&#xff0c;生活照护&#xff0c;康复理疗、精神慰藉、委托代办等。各项服务的详情介绍。 2.选择预约时间 选择…

【RabbitMQ】之持久化机制

目录 一、RabbitMQ 持久化机制 1、RabbitMQ 持久化概述2、队列持久化3、消息持久化4、交换器持久化 二、RabbitMQ 知识扩展 1、内存告警与内存换页2、磁盘告警与配置3、数据写入磁盘时机4、磁盘消息格式5、磁盘文件删除机制 一、RabbitMQ 持久化机制 1、RabbitMQ 持久化概述…

2023-07-31:用r、e、d三种字符,拼出一个回文子串数量等于x的字符串。 1 <= x <= 10^5。 来自百度。

2023-07-31&#xff1a;用r、e、d三种字符&#xff0c;拼出一个回文子串数量等于x的字符串。 1 < x < 10^5。 来自百度。 答案2023-07-31&#xff1a; 大体步骤如下&#xff1a; 1.初始化一个字符串builder&#xff0c;用于构建结果字符串。 2.初始化一个字符变量c…

剑指offer10-I.斐波那契数列

学计算机的对这道题肯定不陌生&#xff0c;我记得是学C语言的时候学递归的时候有这道题&#xff0c;于是我就世界用递归写了如下代码&#xff1a; class Solution {public int fib(int n) {if(n1) return 1;if(n0) return 0;return (fib(n-1) fib(n-2)) % 1000000007;} } 到…

ubuntu22.0安装Barrier局域网共享鼠标键盘

ubuntu22.0安装Barrier局域网共享鼠标键盘 参考网站安装步骤客户端一直开启中解决 参考网站 https://idroot.us/install-barrier-ubuntu-22-04/ 安装步骤 sudo apt update sudo apt upgrade sudo apt install wget apt-transport-https gnupg2 software-properties-common s…

rdb和aof

RDB持久化&#xff1a;原理是将Redis在内存中的数据库记录定时dump到磁盘上的RDB持久化AOF持久化&#xff1a;原理是将Redis的操作日志以追加的方式写入文件 rdb&#xff1a; 开启方式&#xff1a;客户端可以通过向Redis服务器发送save或bgsave命令让服务器生成rdb文件&#…

【Linux】更换jdk版本

目录 一、前言二、查看jdk版本号1、项目中的版本号&#xff08;pom.xml&#xff09;2、服务器中的版本号 三、更换jdk版本1、创建java文件夹2、下载并解压JDK安装包①、下载jdk安装包②、移动到创建好的/usr/local/java路径下③、解压jdk安装包 四、删除原来的jdk版本1、删除原…

企业知识文档管理+群晖nas安全云存储

企业知识管理系统&#xff0c;利用软件系统或其他工具的企业管理方法&#xff0c;利用软件系统或其他工具&#xff0c;对组织中大量的有价值的方案、策划、成果、经验等知识进行分类存储和管理&#xff0c;积累知识资产避免流失&#xff0c;促进知识的学习、共享、培训、再利用…

CPU Architecture Methodologies

MMU MMU(Memory Management Unit) 负责将逻辑地址转化为物理地址对于现代处理器来说&#xff0c;一般每个core都有自己的 MMU页表等数据结构保存在 TLB NUMA Non-uniform memory access (NUMA) is a computer memory design used in multiprocessing, where the memory access…

探索大型语言模型的开源人工智能基础设施:北京开源AI Meetup回顾

原文参见Explore open source AI Infra for Large Language Models: Highlights from the Open Source AI Meetup Beijing | Cloud Native Computing Foundation 背景介绍&#xff1a; 最近&#xff0c;在 ChatGPT 的成功推动下&#xff0c;大型语言模型及其应用程序的流行度激…

CHI中的error处理

Error Handling Error types 包含两种sub-packet级别的error, 和两种packe级别的error; Packet level error Data Error, DERR □ 访问的地址是正确的&#xff0c;但是访问的数据有错误&#xff1b;通常是在数据崩溃的时候使用&#xff0c;例如ECC&#xf…

JSON对象

目录 简介 创建对象 ​编辑json对象作为属性值 json用于交换数据 简介 json&#xff1a;javascript object notation(js标记对象)是一种轻量化的数据交换模式&#xff0c;特点&#xff1a;体积小&#xff0c;数据量大 在js中&#xff0c;json是以对象的形式存在的&#x…

51单片机学习--按键控制流水灯模式定时器时钟

TMOD负责确定T0和T1的工作模式&#xff0c;TCON控制T0和T1的启动或停止计数&#xff0c;同时包含定时器状态 TF1&#xff1a;定时器1溢出标志 TF0&#xff1a;定时器0溢出标志 0~65535 每隔1微秒计数器1&#xff0c;总时间65535微秒&#xff0c;赋上初值64535&#xff0c;则只…

ansible-playbook roles编写lnmp剧本

目录 集中式编写lnmp剧本 执行 分布式编写lnmp剧本 一定要设置ssh免交互 nginx mysql php 执行 集中式编写lnmp剧本 vim /etc/ansible/lnmp.yml - name: lnmp playhosts: dbserversremote_user: roottasks:- name: perpare condifurecopy: src/etc/yum.repos.d/nginx.r…

华为机考--服务失效判断--带答案

新2023年华为OD真题机考题库大全-带答案&#xff08;持续更新)or2023华为OD统一考试&#xff08;AB卷&#xff09;题库清单-带答案&#xff08;持续更新&#xff09; 题目描述 某系统中有众多服务&#xff0c;每个服务用字符串&#xff08;只包含字母和数字&#xff0c;长度<…

使用 NVM(Node Version Manager)管理 Node.js 版本

使用 NVM&#xff08;Node Version Manager&#xff09;管理 Node.js 版本 步骤一&#xff1a;安装 NVM NVM 是一个用于安装和管理不同版本的 Node.js 的工具。首先&#xff0c;你需要确保你的系统上已经安装了 NVM。可以通过以下命令检查 NVM 是否已经安装&#xff1a; nvm …

红队打靶:FourAndSix2.01打靶思路详解(vulnhub)

目录 写在开头 第一步&#xff1a;主机发现与端口扫描 第二步&#xff1a;NFS渗透 第三步&#xff1a;7z压缩包的密码破解 第四步&#xff1a;ssh私钥登录 第五步&#xff1a;lessvi提权 总结与思考 写在开头 本篇博客根据大佬红队笔记的视频进行打靶&#xff0c;详述了…