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

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

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

相关文章:

  • 如何顺滑使用华为云编译构建平台?
  • J3-DenseNet实战
  • 并发编程(九)
  • Vue3组件库 -- element plus 树形选择器组件怎样显示已有的树形菜单?
  • VuePress部署到GitHub Pages
  • Spark SQL基础
  • 浅研究下 DHCP 和 chrony
  • BSP视频教程第29期:J1939协议栈CAN总线专题,源码框架,执行流程和应用实战解析,面向车通讯,充电桩,模组通信等(2024-01-08)
  • Python 基础(八):函数
  • 一种DevOpts的实现方式:基于gitlab的CICD(二)
  • ROS OpenCV 图像基本处理函数
  • kylin集群使用nginx反向代理
  • 快速预览图片类PDF报告,PDF转文字并统计词频
  • ORB SLAM2 编译
  • Tampermonkey油猴插件-各大网盘批量分享,解放双手-下
  • 深入了解以太坊
  • 2019年如何成为全栈工程师?
  • ES6语法详解(一)
  • ES学习笔记(12)--Symbol
  • iOS动画编程-View动画[ 1 ] 基础View动画
  • Java知识点总结(JDBC-连接步骤及CRUD)
  • PHP 程序员也能做的 Java 开发 30分钟使用 netty 轻松打造一个高性能 websocket 服务...
  • 包装类对象
  • 表单中readonly的input等标签,禁止光标进入(focus)的几种方式
  • 仿天猫超市收藏抛物线动画工具库
  • 记录一下第一次使用npm
  • 技术攻略】php设计模式(一):简介及创建型模式
  • 数组大概知多少
  • 小程序开发之路(一)
  • 新书推荐|Windows黑客编程技术详解
  • 正则表达式
  • 机器人开始自主学习,是人类福祉,还是定时炸弹? ...
  • 数据库巡检项
  • #ifdef 的技巧用法
  • #使用清华镜像源 安装/更新 指定版本tensorflow
  • (arch)linux 转换文件编码格式
  • (C语言)二分查找 超详细
  • (day 2)JavaScript学习笔记(基础之变量、常量和注释)
  • (TOJ2804)Even? Odd?
  • (zhuan) 一些RL的文献(及笔记)
  • (附源码)springboot人体健康检测微信小程序 毕业设计 012142
  • (附源码)ssm高校社团管理系统 毕业设计 234162
  • (黑马出品_高级篇_01)SpringCloud+RabbitMQ+Docker+Redis+搜索+分布式
  • (已解决)报错:Could not load the Qt platform plugin “xcb“
  • (轉貼) 2008 Altera 亞洲創新大賽 台灣學生成果傲視全球 [照片花絮] (SOC) (News)
  • .NET Core、DNX、DNU、DNVM、MVC6学习资料
  • @Autowired 与@Resource的区别
  • @serverendpoint注解_SpringBoot 使用WebSocket打造在线聊天室(基于注解)
  • [Android Pro] AndroidX重构和映射
  • [Android View] 可绘制形状 (Shape Xml)
  • [Android] 修改设备访问权限
  • [C#基础]说说lock到底锁谁?
  • [C++] 多线程编程-thread::yield()-sleep_for()
  • [C++] 默认构造函数、参数化构造函数、拷贝构造函数、移动构造函数及其使用案例
  • [C++数据结构](31)哈夫曼树,哈夫曼编码与解码