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基础的更多相关文章

  1. java基础集合经典训练题

    第一题:要求产生10个随机的字符串,每一个字符串互相不重复,每一个字符串中组成的字符(a-zA-Z0-9)也不相同,每个字符串长度为10; 分析:*1.看到这个题目,或许你脑海中会想到很多方法,比如判 ...

  2. node-webkit 环境搭建与基础demo

    首先去github上面下载(地址),具体更具自己的系统,我的是windows,这里只给出windows的做法 下载windows x64版本 下载之后解压,得到以下东西 为了方便,我们直接在这个目录中 ...

  3. js学习笔记:webpack基础入门(一)

    之前听说过webpack,今天想正式的接触一下,先跟着webpack的官方用户指南走: 在这里有: 如何安装webpack 如何使用webpack 如何使用loader 如何使用webpack的开发者 ...

  4. Golang, 以17个简短代码片段,切底弄懂 channel 基础

    (原创出处为本博客:http://www.cnblogs.com/linguanh/) 前序: 因为打算自己搞个基于Golang的IM服务器,所以复习了下之前一直没怎么使用的协程.管道等高并发编程知识 ...

  5. [C#] C# 基础回顾 - 匿名方法

    C# 基础回顾 - 匿名方法 目录 简介 匿名方法的参数使用范围 委托示例 简介 在 C# 2.0 之前的版本中,我们创建委托的唯一形式 -- 命名方法. 而 C# 2.0 -- 引进了匿名方法,在 ...

  6. HTTPS 互联网世界的安全基础

    近一年公司在努力推进全站的 HTTPS 化,作为负责应用系统的我们,在配合这个趋势的过程中,顺便也就想去搞清楚 HTTP 后面的这个 S 到底是个什么含义?有什么作用?带来了哪些影响?毕竟以前也就只是 ...

  7. Swift与C#的基础语法比较

    背景: 这两天不小心看了一下Swift的基础语法,感觉既然看了,还是写一下笔记,留个痕迹~ 总体而言,感觉Swift是一种前后端多种语言混合的产物~~~ 做为一名.NET阵营人士,少少多多总喜欢通过对 ...

  8. .NetCore MVC中的路由(1)路由配置基础

    .NetCore MVC中的路由(1)路由配置基础 0x00 路由在MVC中起到的作用 前段时间一直忙于别的事情,终于搞定了继续学习.NetCore.这次学习的主题是MVC中的路由.路由是所有MVC框 ...

  9. .NET基础拾遗(5)多线程开发基础

    Index : (1)类型语法.内存管理和垃圾回收基础 (2)面向对象的实现和异常的处理基础 (3)字符串.集合与流 (4)委托.事件.反射与特性 (5)多线程开发基础 (6)ADO.NET与数据库开 ...

  10. .NET 基础 一步步 一幕幕[面向对象之方法、方法的重载、方法的重写、方法的递归]

    方法.方法的重载.方法的重写.方法的递归 方法: 将一堆代码进行重用的一种机制. 语法: [访问修饰符] 返回类型 <方法名>(参数列表){ 方法主体: } 返回值类型:如果不需要写返回值 ...

随机推荐

  1. 开源的口袋妖怪自走棋「GitHub 热点速览」

    作为一名 90 后,我对口袋妖怪(宝可梦)游戏有着特殊的感情,满满的都是回忆.如果你也喜欢宝可梦主题的游戏,这款开源的宝可梦自走棋游戏 pokemonAutoChess 一定要试试,它采用战棋(自走棋 ...

  2. MP4 转 TXT 项目与 M3U8 下载脚本

    项目背景 在当今信息社会,视频学习已成为一种重要的知识获取方式.然而,许多用户在观看视频的过程中,效率往往低于预期.为了提升学习效率,我们决定开发一个将 MP4 视频转换为 TXT 文稿的项目.此外, ...

  3. Kubernetes CNI 插件选型和应用场景探讨

    作者:马伟,青云科技容器顾问,云原生爱好者,目前专注于云原生技术,云原生领域技术栈涉及 Kubernetes.KubeSphere.KubeKey 等. 本文介绍容器环境常见网络应用场景及对应场景的 ...

  4. ToDesk云电脑性能如何?价格划算吗?

    云电脑是最近兴起的一种新型计算机形态.当用户面临电脑配置太低,无法顺畅打开大型软件,满足不了日常玩游戏或者高性能渲染,这时候你只需要租借一个高配置的云电脑. 不需要额外购入任何设备,在原来的电脑上下载 ...

  5. 指针进阶(C语言终)

    1. sizeof和strlen的对比 1.1 sizeof 在学习操作符的时候,我们学习了sizeof , sizeof 计算变量所占内存内存空间大小的,单位是 字节,如果操作数是类型的话,计算的是 ...

  6. winform 音乐播放器

    引言 本次项目目的主要为了熟悉axWindowsMediaPlayer,treeview等控件使用,以及学习I/O操作. 技术栈 C# winform 实现效果 设计与实现 使用TreeView实现音 ...

  7. FPGA时序约束基础

    一.时序约束的目的 由于实际信号在FPGA内部期间传输时,由于触发器等逻辑期间并非理想期间,因此不可避免地存在传输延时,这种延迟在高速工作频率.高逻辑级数时会造成后级触发器地建立时间和保持时间不满足, ...

  8. LVM 使用与扩容总结

    转载请注明出处: LVM(Logical Volume Manager,逻辑卷管理器)是一个用于Linux系统的磁盘管理工具.它提供了一种更加灵活的存储管理机制,可以方便地进行磁盘的扩容.缩减.快照以 ...

  9. Java net.sf.jxls 生成模板 并导出excel

    如果是 maven项目需要引入下面这个就可以 <dependency> <groupId>net.sf.jxls</groupId> <artifactId& ...

  10. 很干,但实用——4G模组供电设计及其选型推荐

    ​ 4G模组的外部电源供电设计十分重要,对系统稳定.射频性能都有直接影响. 怎么让工程师朋友们在应用开发中少走弯路呢? 我将以Air780E为例,陆续分享系列实用干货.无论你是专家还是菜鸟,无论你是否 ...