(二)数据库配置操作

Python Web系列文章目录


第一章 系统开发工具

第二章 数据库配置

第三章 用户模块设计

第四章 笔记模块设计

目录

Python Web系列文章目录

一、 数据库设计

1.1 数据库概要说明

1.2 创建数据表

用户表(users)

笔记表(articles)

 1.4 使用MysqlUtil 类的方法



一、 数据库设计

1.1 数据库概要说明
  • 数据库类型: MySQL
  • 数据库名称: notebook
  • 创建方式: 可以通过MySQL命令行或可视化管理工具(如Navicat)创建数据库。
1.2 创建数据表

notebook数据库中,创建两个主要的数据表:users(用户表)和articles(笔记表)。

用户表(users
  • 字段:
    • id: int(8),主键,自动递增
    • username: varchar(255),用户名
    • email: varchar(255),电子邮箱
    • password: varchar(255),密码
  • 引擎: InnoDB
  • 字符集: utf8
笔记表(articles
  • 字段:
    • id: int(8),主键,自动递增
    • title: varchar(255),笔记标题
    • content: text,笔记内容
    • author: varchar(255),作者(可能关联用户表)
    • create_date: datetime,创建日期
  • 引擎: InnoDB
  • 字符集: utf8

注意事项

  1. 在创建表之前,使用DROP TABLE IF EXISTS语句可以确保如果表已经存在,则先删除它。
  2. AUTO_INCREMENT用于自动递增主键值。
  3. DEFAULT NULL表示字段允许为空。
  4. ENGINE=InnoDBCHARSET=utf8确保了表的存储引擎和字符集设置。

示例SQL语句

-- 创建数据库
CREATE DATABASE notebook DEFAULT CHARACTER SET utf8;

-- 创建用户表
DROP TABLE IF EXISTS users;
CREATE TABLE users (
    id INT(8) NOT NULL AUTO_INCREMENT,
    username VARCHAR(255) DEFAULT NULL,
    email VARCHAR(255) DEFAULT NULL,
    password VARCHAR(255) DEFAULT NULL,
    PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

-- 创建笔记表
DROP TABLE IF EXISTS articles;
CREATE TABLE articles (
    id INT(8) NOT NULL AUTO_INCREMENT,
    title VARCHAR(255) DEFAULT NULL,
    content TEXT,
    author VARCHAR(255) DEFAULT NULL,
    create_date DATETIME DEFAULT NULL,
    PRIMARY KEY (id)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

1.3 数据库操作类

在本项目中使用PyMySQL 驱动来数据库,并实现对笔记的增删改查功能。每次执行数据表操作 时都需要遵循如下流程:

连接数据库→执行 SQL 语句 →关闭数据库

为了复用代码,我们单独创建一个mysql_uitl.py  文件,文件中包含一个MysqlUtil 类,用于实现 基本的增删改查方法。代码如下:

import pymysql
import traceback
import sys

class MysqlUtil:
    def __init__(self):
        # 数据库连接参数
        self.host = '127.0.0.1'
        self.user = 'root'
        self.password = 'root'
        self.database = 'notebook'
        
        # 建立数据库连接
        self.db = pymysql.connect(
            host=self.host,
            user=self.user,
            password=self.password,
            db=self.database
        )
        # 设置游标为字典类型
        self.cursor = self.db.cursor(pymysql.cursors.DictCursor)

    def execute_sql(self, sql):
        try:
            # 执行SQL语句
            self.cursor.execute(sql)
            # 提交到数据库执行
            self.db.commit()
        except Exception as e:
            # 如果发生异常,则回滚
            print("发生异常:", e)
            self.db.rollback()
            # 输出异常信息
            traceback.print_exc()
        finally:
            # 最终关闭数据库连接
            self.db.close()

    def insert(self, sql):
        """插入数据库"""
        self.execute_sql(sql)

    def fetchone(self, sql):
        """查询并返回一条数据"""
        try:
            self.cursor.execute(sql)
            result = self.cursor.fetchone()
        except:
            # 如果发生异常,则回滚
            self.db.rollback()
            # 输出异常信息
            traceback.print_exc()
        finally:
            # 最终关闭数据库连接
            self.db.close()
        return result

    def fetchall(self, sql):
        """查询并返回多条数据"""
        try:
            self.cursor.execute(sql)
            results = self.cursor.fetchall()
        except:
            # 如果发生异常,则回滚
            self.db.rollback()
            # 输出异常信息
            info = sys.exc_info()
            print(info[0], ":", info[1])
        finally:
            # 最终关闭数据库连接
            self.db.close()
        return results

    def delete(self, sql):
        """删除数据"""
        self.execute_sql(sql)

    def update(self, sql):
        """更新数据"""
        self.execute_sql(sql)

 1.4 使用MysqlUtil 类的方法

代码如下:

from mysql_util import MysqlUtil

# 实例化 MysqlUtil 类
mysql_util = MysqlUtil()

# 插入数据
insert_sql = "INSERT INTO users (username, email, password) VALUES ('john', 'john@example.com', 'password123')"
mysql_util.insert(insert_sql)

# 查询数据
select_sql = "SELECT * FROM users WHERE username='john'"
user = mysql_util.fetchone(select_sql)
print(user)

# 更新数据
update_sql = "UPDATE users SET password='newpassword' WHERE username='john'"
mysql_util.update(update_sql)

# 删除数据
delete_sql = "DELETE FROM users WHERE username='john'"
mysql_util.delete(delete_sql)

在使用MysqlUtil类时,我们只需要引入MysqlUtil类,实例化该类,并调用相应方法即可。

  • 5
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值