Python Web系列文章目录
第一章 系统开发工具
第二章 数据库配置
第三章 用户模块设计
第四章 笔记模块设计
目录
一、 数据库设计
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
注意事项
- 在创建表之前,使用
DROP TABLE IF EXISTS
语句可以确保如果表已经存在,则先删除它。 AUTO_INCREMENT
用于自动递增主键值。DEFAULT NULL
表示字段允许为空。ENGINE=InnoDB
和CHARSET=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类,实例化该类,并调用相应方法即可。