Python Flask在线笔记:数据库设计
来自CloudWiki
数据库概要说明
采用MySQL数据库,数据库名称为notebook
CREATE DATABASE `notebook` DEFAULT CHARACTER SET utf8 COLLATE utf8_general_ci;;
- CREATE DATABASE `test` : 代表的是创建数据库 test。
- DEFAULT CHARACTER SET utf8 : 代表的是将该库的默认编码格式设置为utf8格式。
- COLLATE utf8_general_ci : 代表的是数据库校对规则,utf8_bin将字符串中的每一个字符用二进制数据存储,区分大小写。utf8_genera_ci不区分大小写,ci为case insensitive的缩写,即大小写不敏感。utf8_general_cs区分大小写,cs为case sensitive的缩写,即大小写敏感。
创建数据表
- users:用户表
- articles:笔记表
use notebook;
-- ---------------------------- -- Table structure for articles -- ---------------------------- 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; -- ---------------------------- -- Records of articles -- ----------------------------
-- ---------------------------- -- Table structure for users -- ---------------------------- 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; -- ---------------------------- -- Records of users -- ----------------------------
数据库操作类
mysql_util.py:
import pymysql # 引入pymysql模块 import traceback # 引入python中的traceback模块,跟踪错误 import sys # 引入sys模块 class MysqlUtil(): def __init__(self): ''' 初始化方法,连接数据库 ''' host = '127.0.0.1' # 主机名 user = 'root' # 数据库用户名 password = '123456' # 数据库密码 database = 'notebook' # 数据库名称 self.db = pymysql.connect(host=host,user=user,password=password,db=database) # 建立连接 self.cursor = self.db.cursor(cursor=pymysql.cursors.DictCursor) # 设置游标,并将游标设置为字典类型 def insert(self, sql): ''' 插入数据库 sql:插入数据库的sql语句 ''' try: # 执行sql语句 self.cursor.execute(sql) # 提交到数据库执行 self.db.commit() except Exception: # 方法一:捕获所有异常 # 如果发生异常,则回滚 print("发生异常", Exception) self.db.rollback() finally: # 最终关闭数据库连接 self.db.close() def fetchone(self, sql): ''' 查询数据库:单个结果集 fetchone(): 该方法获取下一个查询结果集。结果集是一个对象 ''' try: # 执行sql语句 self.cursor.execute(sql) result = self.cursor.fetchone() except: # 方法二:采用traceback模块查看异常 # 输出异常信息 traceback.print_exc() # 如果发生异常,则回滚 self.db.rollback() finally: # 最终关闭数据库连接 self.db.close() return result def fetchall(self, sql): ''' 查询数据库:多个结果集 fetchall(): 接收全部的返回结果行. ''' try: # 执行sql语句 self.cursor.execute(sql) results = self.cursor.fetchall() except: # 方法三:采用sys模块回溯最后的异常 # 输出异常信息 info = sys.exc_info() print(info[0], ":", info[1]) # 如果发生异常,则回滚 self.db.rollback() finally: # 最终关闭数据库连接 self.db.close() return results def delete(self, sql): ''' 删除结果集 ''' try: # 执行sql语句 self.cursor.execute(sql) self.db.commit() except: # 把这些异常保存到一个日志文件中,来分析这些异常 # 将错误日志输入到目录文件中 f = open("\log.txt", 'a') traceback.print_exc(file=f) f.flush() f.close() # 如果发生异常,则回滚 self.db.rollback() finally: # 最终关闭数据库连接 self.db.close() def update(self, sql): ''' 更新结果集 ''' try: # 执行sql语句 self.cursor.execute(sql) self.db.commit() except: # 如果发生异常,则回滚 self.db.rollback() finally: # 最终关闭数据库连接 self.db.close() if __name__ == '__main__':#程序入口 db = MysqlUtil() # 实例化数据库操作类 email = 'xin5452@163.com' username = 'xin' password ='123456' sql = "INSERT INTO users(email,username,password) \ VALUES ('%s', '%s', '%s')" % (email,username,password) # user表中插入记录 db.insert(sql)