flask flask-sqlalchemy sqlit3

这次是数据库使用,拒绝花哨主打就是一个简单

pip install flask-sqlalchemy

调用数据库现在配置里边设置下然后绑上APP后,定义数据结构类.下面是我认为最简单的数据库增删查改结构。


from flask_sqlalchemy import SQLAlchemy
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:///db.sqlite3'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = True
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 '<User %r>' % self.username
## 如果没有表要创建表,有的话则无改动
with app.app_context():db.create_all()
##查询数据
@app.route("/sql")
def find_all_users():users = User.query.all()print(users)return render_template("sql.html", users=users)
##查询一个数据
@app.route("/get/<int:get_id>")
def get_by_id(get_id):get_user = User.query.get(get_id)  # User.query.filter_by(id=get_id).first()return "编号:{0},用戶名:{1},邮箱:{2}".format(get_user.id, get_user.username, get_user.email)
##增加数据
@app.route("/add/<username>")
def add_user(username):new_user = User()new_user.username = usernamenew_user.email = username + "@qq.com"db.session.add(new_user)db.session.commit()return redirect("/")
##删除数据
@app.route("/delete/<int:del_id>")
def delete_by_id(del_id):del_user = User.query.filter_by(id=del_id).first()if del_user is not None:db.session.delete(del_user)db.session.commit()return redirect("/")@app.route("/update", methods=["GET", "POST"])
def update():if request.method == "POST":user_id = request.form.get("id")new_username = request.form.get("username")new_email = request.form.get("email")user = User.query.get(user_id)if user:user.username = new_usernameuser.email = new_emaildb.session.commit()return redirect(url_for("update"))users = User.query.all()return render_template("update.html", users=users)

sql.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Title</title>
</head>
<body>
<table border="1"><tr><th>编号</th><th>用户名</th><th>邮箱</th><th>操作</th></tr>{% for u in users %}<tr><td>{{ u.id }}</td><td>{{ u.username }}</td><td>{{ u.email }}</td><td><a href="delete/{{ u.id }}">删除</a></td></tr>{% endfor %}
</table>

update.html

<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title>Update User</title>
</head>
<body><table border="1"><tr><th>编号</th><th>用户名</th><th>邮箱</th></tr>{% for u in users %}<tr><td>{{ u.id }}</td><td>{{ u.username }}</td><td>{{ u.email }}</td></tr>{% endfor %}</table><h2>更新用户信息</h2><form action="/update" method="post"><label for="id">用户ID:</label><br><input type="text" id="id" name="id" required><br><label for="username">新用户名:</label><br><input type="text" id="username" name="username" required><br><label for="email">新邮箱:</label><br><input type="email" id="email" name="email" required><br><input type="submit" value="更新"></form>
</body>
</html>

补充内容数据迁移

安装

pip install flask-migrate

app 里边进行注册和绑定

from flask_sqlalchemy import SQLAlchemy
db = SQLAlchemy(app)
from flask_migrate import Migrate
migrate =Migrate(app,db)

类似GIT的版本控制。流程为初始化(只执行一次)==》构建迁移脚本=》迁移

flask db init
flask db migrate
flask db upgrade

这脚本自动构建的时候经常自己出错需要打开排查

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

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

相关文章

哈希表-散列表数据结构

1、什么是哈希表&#xff1f; 哈希表也叫散列表&#xff0c;哈希表是根据关键码值(key value)来直接访问的一种数据结构&#xff0c;也就是将关键码值(key value)通过一种映射关系映射到表中的一个位置来加快查找的速度&#xff0c;这种映射关系称之为哈希函数或者散列函数&…

Rollup-plugin-bundle-analyzer VS Rollup-plugin-visualizer

分析和可视化Rollup打包后的文件的插件 Rollup-plugin-bundle-analyzerRollup-plugin-visualizer Rollup-plugin-bundle-analyzer和Rollup-plugin-visualizer都是用于分析和可视化Rollup打包后的文件的插件&#xff0c;但它们在功能和使用方式上存在一些差异。 Rollup-plugi…

PostGIS教程学习十九:基于索引的聚簇

PostGIS教程学习十九&#xff1a;基于索引的聚簇 数据库只能以从磁盘获取信息的速度检索信息。小型数据库将完全位于于RAM缓存&#xff08;内存&#xff09;&#xff0c;并摆脱物理磁盘访问速度慢的限制。但是对于大型数据库&#xff0c;对物理磁盘的访问将限制数据库的信息检…

FFmpeg获取音视频流信息

文章目录 前言一、需求二、源码三、运行结果 前言 本文记录用 FFmpeg 获取视频流音频流的信息&#xff08;编码格式、分辨率、帧率、播放时长…&#xff09;&#xff0c;所用的工程基于上个博客编译成功的工程&#xff1a;使用FFmpeg4.3.1的SDK官方开发包编译ffmpeg.c 一、需求…

sqlcmd执行sql文件

可以使用以下命令来在SQL Server中执行SQL脚本文件&#xff08;.sql&#xff09;&#xff1a; sqlcmd -S <服务器名称> -d <数据库名称> -i <脚本文件路径> 其中&#xff0c;<服务器名称>为要连接的 SQL Server 实例的名称或 IP 地址&#xff1b; &l…

掌握 Spring IoC 容器与 Bean 作用域:详解 singleton 与 prototype 的使用与配置

在您的应用程序中&#xff0c;由 Spring IoC 容器管理的形成其核心的对象被称为 "bean"。一个 bean 是由 Spring IoC 容器实例化、组装和管理的对象 这些 bean 是通过您提供给容器的配置元数据创建的。Bean 定义包含了所谓的配置元数据&#xff0c;容器需要了解以下内…

sqlcmd导出sql文件

使用SQLCMD命令行工具可以将数据库中的查询结果导出为SQL文件。 下面是示例代码&#xff1a; sqlcmd -S <服务器名称> -d <数据库名称> -U <用户名> -P <密码> -Q "<查询语句>" -o <输出路径\文件名.sql> 其中&#xff0c;需…

透明OLED拼接屏:重塑大屏显示的新篇章

随着科技的快速发展&#xff0c;大屏显示技术已经逐渐渗透到我们生活的方方面面。作为显示技术领域的一大革新&#xff0c;透明OLED拼接屏以其独特的透明显示特性&#xff0c;正逐渐成为大屏显示市场的新宠。尼伽小编将深入探讨透明OLED拼接屏的技术特点、应用场景以及市场前景…

中国葡萄酒消费者的口味偏好

有一段时间&#xff0c;“中国口味”的问题是全世界葡萄酒销售者的热门话题&#xff0c;因为他们积极探索每一个线索&#xff0c;以发现让他们在市场上领先的秘密。为此进行了大量研究&#xff0c;多年前葡萄酒销售商或多或少形成了一个共识&#xff1a;尽管中国人的口味差异很…

系列十四、while do...while switch模板代码

一、while & do...while & switch模板代码 1.1、while /*** 需求&#xff1a;使用while循环打印5遍Hello World!*/ Test public void print5() {int i 1;while (i < 5) {System.out.println("Hello World! " LocalDateTime.now());// 线程休眠&#x…

Android Framework 常见解决方案(25-2)定制CPUSET解决方案-system修改及编译部分调整

1 原理说明 这个方案有如下基本需求&#xff1a; 构建自定义CPUSET&#xff0c;/dev/cpuset中包含一个全新的cpuset分组。且可以通过set_cpuset_policy和set_sched_policy接口可以设置自定义CPUSET。开机启动后可以通过zygote判定来对特定的应用进程设置CPUSET&#xff0c;并…

Spring MVC学习之——了解MVC设计模式

MVC设计模式 MVC介绍 MVC 模式代表 Model-View-Controller&#xff08;模型-视图-控制器&#xff09; 模式。这种模式用于应用程序的分层开发。 Model&#xff08;模型&#xff09; - 模型代表一个存取数据的对象或 JAVA POJO。它也可以带有逻辑&#xff0c;在数据变化时更新…

HTML5中form表单防止重复提交的两种方法

form表单重复提交是在多用户Web应用中最常见、带来很多麻烦的一个问题。有很多的应用场景都会遇到重复提交问题 (1)点击提交按钮两次。 (2)点击刷新按钮。 (3)使用浏览器后退按钮重复之前的操作 导致重复提交表单。 (4)浏览器重复的HTTP请求。 (5)用户提交表单时可能因为网…

Java项目:112SSM在线电影订票系统

博主主页&#xff1a;Java旅途 简介&#xff1a;分享计算机知识、学习路线、系统源码及教程 文末获取源码 一、项目介绍 在线电影订票系统基于SpringSpringMVCMybatis开发&#xff0c;系统分为前台和后台&#xff0c;前台主要用来用户浏览电影信息&#xff0c;订票&#xff0c…

Java synchronized 和 volatile 的区别是什么?

Java synchronized 和 volatile 的区别是什么&#xff1f; Java 中的 synchronized 和 volatile 都涉及到多线程编程&#xff0c;但它们的作用和使用场景略有不同。 synchronized 关键字&#xff1a; 作用&#xff1a; 用于实现对共享资源的互斥访问&#xff0c;确保在同一时…

人工智能任务2-读懂Transformer模型的十个灵魂拷问问题,深度理解Transformer模型架构

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下人工智能任务2-读懂Transformer模型的十个灵魂拷问问题&#xff0c;深度理解Transformer模型架构。Transformer模型是一种基于自注意力机制的神经网络架构&#xff0c;被广泛用于自然语言处理任务中&#xff0c;如机…

系分笔记数据库技术之数据库安全措施

文章目录 1、概要2、数据库的保护措施3、数据库的故障4、备份和日志5、总结 1、概要 数据库设计是考试重点&#xff0c;常考和必考内容&#xff0c;本篇主要记录了知识点&#xff1a;数据库故障及解决、数据库安全保护措施和数据库备份及恢复。 2、数据库的保护措施 数据库安全…

es6 定义变量 let 跟cosnt 区别

es6 定义变量 let 跟cosnt 区别 以上内容由chatgpt中文网 动态生成 可变性&#xff1a; let&#xff1a; 声明的变量具有可变性&#xff0c;可以被重新赋值。 const&#xff1a; 声明的变量是常量&#xff0c;一旦赋值后就不能再重新赋值。但需要注意的是&#xff0c;对于对象…

C++系列十六:枚举

枚举 一、C枚举基础 在C中&#xff0c;枚举&#xff08;Enumeration&#xff09;是一种用户定义的数据类型&#xff0c;它包含一组整数值&#xff0c;每个值都与一个标识符关联。通过使用枚举&#xff0c;我们可以使代码更加清晰易懂&#xff0c;避免使用魔术数字或字符串。 …

卡码网Java基础课 | 1. A+B问题I

卡码网Java基础课|1. AB问题I 类和面向对象new关键字程序基本结构方法的组成返回类型ReturnType函数名methodType形参列表方法体 输入输出Scanner类的使用 变量完整代码输入&#xff1a;Scanner类的使用private和public 类和面向对象 一个类具有一些“属性”和“方法”&#x…