前言

最近在学习python的web框架Flask,在了解Flask操作数据库的时候,刚开始是想用Flask-SQLAlchemy这个扩展,但是一直由于版本等其他原因操作失败,今天查了以下pymysql这个库也可以用来操作MySql,浅浅试了一下貌似不错,所以就打算写下这篇博客来记录一下在Flask中如何使用pymysql操作数据库MySql

PyMySql库

概述

PyMySQL 是从 Python 连接到 MySQL 数据库服务器的接口,点击用户指南 — PyMySQL 0.7.2 文档查看官方文档

安装

1
pip install pymysql

Flask框架中的使用

  1. 文件config.py的配置

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    import pymysql

    # 链接MySql数据库的配置
    DB_CONFIG = {
    "host": "localhost",
    "port": 3306,
    "user": "root",
    "passwd": "123456",
    "db": "flask", # 数据库要连接的数据库名称
    "charset": "utf8"
    }


    # 将对数据库的常用操作封装成一个类来使用
    class SQLManager(object):

    # 初始化实例方法
    def __init__(self):
    self.conn = None # 初始化连接对象为空
    self.cursor = None # 初始化游标对象为空
    self.connect() # 调用自身连接数据库函数connect

    # 连接数据库
    def connect(self):
    self.conn = pymysql.connect(
    host=DB_CONFIG["host"],
    port=DB_CONFIG["port"],
    user=DB_CONFIG["user"],
    passwd=DB_CONFIG["passwd"],
    db=DB_CONFIG["db"],
    charset=DB_CONFIG["charset"]
    )
    self.cursor = self.conn.cursor()

    # 以下的sql参数均为MySql语句
    # fetchall()查询所有符合的数据
    def get_all(self, sql, args=None):
    self.cursor.execute(sql, args)
    result = self.cursor.fetchall()
    return result

    # fetchone()查询单条数据
    def get_one(self, sql, args=None):
    self.cursor.execute(sql, args)
    result = self.cursor.fetchone()
    return result

    # 执行单条SQL语句并commit提交(多次操作就要多次提交)
    def modify(self, sql, args=None):
    self.cursor.execute(sql, args)
    self.conn.commit()

    # 使用pymysql的executemany()可以执行多条SQL语句一次提交
    def multi_modify(self, sql, args=None):
    self.cursor.executemany(sql, args)
    self.conn.commit()

    # 关闭数据库cursor和连接
    def close(self):
    self.cursor.close()
    self.conn.close()

    # 通过使用with语句可以实现缩进结束自动关闭文件句柄
    # 优化数据库连接类SQLManager类,使其支持with语句操作。
    # 进入with语句自动执行
    def __enter__(self):
    return self

    # 退出with语句块自动执行
    def __exit__(self, exc_type, exc_val, exc_tb):
    self.close()
  2. 常用操作实例

    • 创建表

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      13
      14
      15
      16
      17
      18
      19
      20
      from flask import Flask

      from config import *

      app = Flask(__name__)
      app.config.from_object('config')

      # 创建实例
      db = SQLManager()
      db.modify(sql="""
      CREATE TABLE IF NOT EXISTS `users`(
      `id` INT UNSIGNED AUTO_INCREMENT NOT NULL ,
      `nickName` VARCHAR(100) NOT NULL UNIQUE ,
      `gender` INT UNSIGNED NOT NULL,
      `telephone` VARCHAR(100) NOT NULL UNIQUE,
      `email` VARCHAR(100) NOT NULL UNIQUE,
      PRIMARY KEY ( `id` )
      )ENGINE=InnoDB DEFAULT CHARSET=utf8mb4
      """)
      db.close()
    • 插入操作

      1
      2
      3
      4
      5
      6
      7
      db.modify(sql="""
      INSERT INTO `users`
      (id, nickName, gender, telephone, email)
      VALUES
      (0, 'Aurora', 1, '12345678910', '1234567890@qq.com')
      """)
      db.close()
    • 查询操作

      1
      2
      3
      4
      5
      6
      # 查询操作
      res = db.get_all(sql="""
      SELECT * FROM users;
      """)
      db.close()
      print(res)

发现任何错误欢迎在评论区提出~

ps:可能由于评论系统的问题导致无法及时回应的话请谅解~