Python__FLASK__MySQL基础
1.数据库的基本操作
创建数据库:使用“CREATE DATABASE 数据库名;”语句创建新的数据库
查看数据库:使用“SHOW DATABASES;”语句查看所有数据库
选择数据库:使用“USE 数据库名;”语句选择要进行操作的数据库
删除数据库:使用“DROP DATABASES 数据库名;”语句删除数据库
2.数据表的基本操作
创建表:使用“CREATE TABLE 表明(列名 数据类型[约束],...);”语句创建表
查看表:使用“SHOW TABLES;”语句查看当前数据库中的所有表。
查看表结构:使用“DESCRIBE 表名;”或“SHOW COLUMNS FROM 表名;”语句查看表结构
删除表:使用“DROP TABLE 表名;”语句删除表
3.数据的基础操作
插入数据:使用“INSERT INTO 表名(列名1,列明2,...)VALUES(值1,值2,...);”语句插入数据。
查询数据:使用“SELECT 列名1,列名2,...FROM 表名 [WHERE 条件];”语句查询数据。可以使用“*”代替列名表示查询所有列。
更新数据:使用“UPDATE 表名 SET 列名1 = 值1,列名2 = 值2,...[WHERE 条件];”数据更新数据
删除数据:使用“DELETE FROM 表名 [WHERE 条件];”语句删除数据。如果不加WHERE条件,将删除表中的所有数据。
4. FLASK配置环境
数据库创建 create database 数据库名 default charset utf8;
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI']='musql+pymysql://root:Zwh119811@127.0.0.1/数据库名' #mysql+pymsql://root:密码@路由地址/数据库名
app.config['SQLALCHEMY_TRACK_MODIFICATIONS']=False 9
db=SQLAlchemy(app)
5.创建模型及flask数据表
class Role(db.Model):
'''角色表'''
__tablename__='role'
id=db.Column(db.Integer,primary_key=True) #数字即int类型
name=db.Column(db.String(32),unique=True)
class User(db.Model):
'''用户表'''
__tablename__='user'
id=db.Column(db.Integer,primary_key=True) #默认自增长
name = db.Column(db.String(128), unique=True)
password=db.Column(db.String(128))
#表关系 外键ForeignKey 用来关联到另外一张表
role_id=db.Column(db.Integer,db.ForeignKey('role.id'))
if __name__ =='__main__':
with app.app_context():
#清除所有表
db.drop_all()
#创建所有表
db.drop_all()
#创建对象,插入数据
role1=Role(name='admin')
# session记录到对象任务中
db.session.add(role1)
#提交任务
db.session.commit()
role2=Role(name='admin2')
db.session.add(role2)
db.session.commit()
use1=User(name='里看',password='321',role_id=role1.id) #关联到第一个角色
use2=
User(name='luxun',password='321',role_id=role2.id) #关联到第二个角色
db.session.add_all([use1,use2]
db.session.commit()
#class Role(db.Mode1):定义了一个名为Role的类,他继承db.Model。db.Model 是SQLAlchemy 提供的一个基类,用于定义数据库模型
#__tablename__ = 'role':这是一个类属性,用于这个模型类在数据库中对应的表名。表名被设置为'role'。
#id = db.Column(db.Integer, primary_key=True)
: 这行代码定义了一个名为 id
的列,其数据类型为整数(db.Integer
),并且这个列被指定为主键(primary_key=True
)。主键是表中每条记录的唯一标识符。
#name = db.Column(db.String(32), unique=True): 这行代码定义了一个名为 name 的列,其数据类型为长度不超过32个字符的字符串(db.String(32))。unique=True 参数表示这个列的值在表中必须是唯一的,即不允许有两条记录具有相同的 name 值。
#role_id = db.Column(db.Integer, db.ForeignKey('role.id')): 定义了一个名为 role_id 的列,其数据类型为整数,并且这个列被设置为外键,引用 role 表中的 id 列。这表示每个用户都与一个角色相关联,通过 role_id 来建立这种关系。同样,这里更正了原代码中的 db.Interger 为 db.Integer。
6.增删改查
class User(db.Model): #映射进入数据库内部
__tablename__ = "user_1" #表名
id = db.Column(db.Integer, primary_key=True, autoincrement=True) #设置字段,且为主键,自主增长
#string在数据库中为varchar
username = db.Column(db.String(100), nullable=False) #设置用户名字段,为字符串类型,可设置长度,设置不可为空
password = db.Column(db.String(100), nullable=False) #设置密码字段,参数同上
@app.route('/user/add') #增添数据
def user_add():
# 创建ORM对象,设计一条数据,包含数据库内的字段
user1 = User(username="admin", password="123")
user2 = User(username="admin", password="12345")
user3 = User(username="张三", password="abc")
#使用add_all(),方法一次性添加多个对象 但首先需要将它们放入一个列表中
# 如果只有一个,那就db.session.add(user1)
users_to_add = [user1, user2, user3]
db.session.add_all(users_to_add) #将ORM对象添加到db.session中
#将db.session中的改变同步到数据库中,每一步对数据库进行操作都要有这个。
db.session.commit()
return "用户创建成功"
@app.route('/user/query') #查找数据
def query():
# 1.get查找,根据主键查找
#user = User.query.get(1) 查找到主键值为1的User对象(就是一行的数据
#print(f"{user.id}:{user.username}:{user.password}")
#return "数据查找成功"
# 2.filter.by查找
users = User.query.filter_by(username="admin")
#通过用户名来查找,查找所有为admin的用户,但不支持模糊搜索
for user in users:
print(user.username,user.password) # 可以调用user内的全部字段
return "数据查找成功"
# User.query.all() 获取表中的全部的User数据,返回数据为列表类型
# .exists() 判断数据是否存在
@app.route('/user/update')
def update():
#查找得到其中的数据
user = User.query.filter_by(username="张三").first()
# 不加first返回的是一个对象而不是一个实例
# 但所有删改都智能对某一个特定实例进行,所以必须要将实例从对象中取出
user.password = "aaaaa" # 更改user的数据
db.session.commit() #同步到数据库
return "数据修改成功!"
@app.route('/user/delete')
def delete():
# 查找到对应的数据
user = User.query.filter_by(username="张三").first()
# db.session中删除对应数据
db.session.delete(user)
# 同步到数据库
db.session.commit()
return "数据删除成功!"
Python__FLASK__MySQL基础的更多相关文章
- java基础集合经典训练题
第一题:要求产生10个随机的字符串,每一个字符串互相不重复,每一个字符串中组成的字符(a-zA-Z0-9)也不相同,每个字符串长度为10; 分析:*1.看到这个题目,或许你脑海中会想到很多方法,比如判 ...
- node-webkit 环境搭建与基础demo
首先去github上面下载(地址),具体更具自己的系统,我的是windows,这里只给出windows的做法 下载windows x64版本 下载之后解压,得到以下东西 为了方便,我们直接在这个目录中 ...
- js学习笔记:webpack基础入门(一)
之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...
- Golang, 以17个简短代码片段,切底弄懂 channel 基础
(原创出处为本博客:http://www.cnblogs.com/linguanh/) 前序: 因为打算自己搞个基于Golang的IM服务器,所以复习了下之前一直没怎么使用的协程.管道等高并发编程知识 ...
- [C#] C# 基础回顾 - 匿名方法
C# 基础回顾 - 匿名方法 目录 简介 匿名方法的参数使用范围 委托示例 简介 在 C# 2.0 之前的版本中,我们创建委托的唯一形式 -- 命名方法. 而 C# 2.0 -- 引进了匿名方法,在 ...
- HTTPS 互联网世界的安全基础
近一年公司在努力推进全站的 HTTPS 化,作为负责应用系统的我们,在配合这个趋势的过程中,顺便也就想去搞清楚 HTTP 后面的这个 S 到底是个什么含义?有什么作用?带来了哪些影响?毕竟以前也就只是 ...
- Swift与C#的基础语法比较
背景: 这两天不小心看了一下Swift的基础语法,感觉既然看了,还是写一下笔记,留个痕迹~ 总体而言,感觉Swift是一种前后端多种语言混合的产物~~~ 做为一名.NET阵营人士,少少多多总喜欢通过对 ...
- .NetCore MVC中的路由(1)路由配置基础
.NetCore MVC中的路由(1)路由配置基础 0x00 路由在MVC中起到的作用 前段时间一直忙于别的事情,终于搞定了继续学习.NetCore.这次学习的主题是MVC中的路由.路由是所有MVC框 ...
- .NET基础拾遗(5)多线程开发基础
Index : (1)类型语法.内存管理和垃圾回收基础 (2)面向对象的实现和异常的处理基础 (3)字符串.集合与流 (4)委托.事件.反射与特性 (5)多线程开发基础 (6)ADO.NET与数据库开 ...
- .NET 基础 一步步 一幕幕[面向对象之方法、方法的重载、方法的重写、方法的递归]
方法.方法的重载.方法的重写.方法的递归 方法: 将一堆代码进行重用的一种机制. 语法: [访问修饰符] 返回类型 <方法名>(参数列表){ 方法主体: } 返回值类型:如果不需要写返回值 ...
随机推荐
- iOS关于高德地图定位和热点搜索使用小结
最近项目刚刚忙完,有空整理一下用到的相关技术点.地图是比较常见的功能模块,现在用的比较多的是地图当前位置显示,公交.骑行.步行路线信息,附近热点位置搜索.现在国内用的比较多的是高德.百度,国外的话可以 ...
- 00 通过 Pytorch 实现 Transformer 框架完整代码
博客配套视频链接: https://space.bilibili.com/383551518?spm_id_from=333.1007.0.0 b 站直接看 配套 github 链接:https:// ...
- QToss:基于.NET架构的跨境电商的工具,助力企业实现智能数据营销
2024年10月13日下午参加了一场在深圳举办的跨境电商大佬们的聚会,现场参加的人数上千人. 大会分享嘉宾中有位来自美国的,他告诉我们不用担心美国政府会把TikTok禁掉,TikTok在全世界都很受欢 ...
- 在 Exchange Server 中配置特定于客户端的消息大小限制
在 Exchange Server 中配置特定于客户端的消息大小限制 微软官方详细文档如下: https://learn.microsoft.com/zh-cn/exchange/architectu ...
- 洛谷P1644跳马问题
跳马问题 题目链接 题目背景 在爱与愁的故事第一弹第三章出来前先练练四道基本的回溯/搜索题吧-- 题目描述 中国象棋半张棋盘如图 \(1\) 所示.马自左下角 \((0,0)\) 向右上角 \((m, ...
- redis配置文件剖析
解析配置文件 #是否在后台运行:no:不是后台运行 daemonize yes #是否开启保护模式,默认开启.要是配置里没有指定bind和密码.开启该参数后,redis只会本地进行访问,拒绝外部访问. ...
- 常见return错误
常见return错误 3221225477 (0xC0000005): 访问越界,一般是读或写了野指针指向的内存. 3221225725 (0xC00000FD): 堆栈溢出,一般是无穷递归造成的. ...
- docker bulid tag push到自己的docker hub 仓库
-t(或 --tag)参数:用于给构建的镜像指定标签(tag).标签的格式通常是 [仓库名/][用户名/]镜像名:版本号 -f(或 --file)参数: 指定构建镜像所使用的 Dockerfile 的 ...
- 2.11 Linux四种远程管理协议
提到远程管理,通常指的是远程管理服务器,而非个人计算机.个人计算机可以随时拿来用,服务器通常放置在机房中,用户无法直接接触到服务器硬件,只能采用远程管理的方式. 远程管理,实际上就是计算机(服务器)之 ...
- 2024 AH CSP-S 迷惑行为大赏
洛谷专栏阅读:https://www.luogu.com.cn/article/0atx674s 一.概述 观前提示:本届CSP-S安徽省整活相较于其他省份不是那么"群英荟萃",观 ...