#学习python,准备写一个博客,第一天:在别人代码基础上写一个数据库操作的db.py
1)python代码
#!/usr/bin/env python # -*- coding: UTF-8 -*- ''' v1.0 博客内容的添加、修改、删除、查看 ''' import pymysql import logging import sys import datetime,time # 加入日志 # 获取logger实例 logger = logging.getLogger("baseSpider") # 指定输出格式 formatter = logging.Formatter('%(asctime)s\ %(levelname)-8s:%(message)s') # 文件日志 file_handler = logging.FileHandler("baseSpider.log") file_handler.setFormatter(formatter) # 控制台日志 console_handler = logging.StreamHandler(sys.stdout) console_handler.setFormatter(formatter) # 为logger添加具体的日志处理器 logger.addHandler(file_handler) logger.addHandler(console_handler) logger.setLevel(logging.INFO) class DBHelper: # 构造函数 def __init__(self, host='127.0.0.1', user='blog', pwd='sf123456', db='myblog'): self.host = host self.user = user self.pwd = pwd self.db = db self.conn = None self.cur = None # 连接数据库 def connectDatabase(self): try: self.conn = pymysql.connect(self.host, self.user, self.pwd, self.db, charset='utf8') except: logger.error("connectDatabase failed") return False self.cur = self.conn.cursor() return True # 关闭数据库 def close(self): # 如果数据打开,则关闭;否则没有操作 if self.conn and self.cur: self.cur.close() self.conn.close() return True # 执行数据库的sq语句,主要用来做插入操作 def execute(self, sql, params=None): # 连接数据库 self.connectDatabase() try: if self.conn and self.cur: # 正常逻辑,执行sql,提交操作 self.cur.execute(sql, params) self.conn.commit() except: logger.error("execute failed: " + sql) logger.error("params: " + params) self.close() return False return True # 用来查询表数据 def fetchall(self, sql, params=None): self.execute(sql, params) return self.cur.fetchall() if __name__ == '__main__': dbhelper = DBHelper('192.168.0.111') # 操作表 tbl = "blog_content" dt = str(datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")) sql = """insert into \ %s(blog__topic, blog_content, blog_time) \ values('My first blog','hello,every body,this is my first blog','%s')""" %(tbl,dt) result = dbhelper.execute(sql,None) if result: logger.info("table %s 操作成功" %(sql)) else: logger.info("table %s 操作失败" %(sql))
2)数据库设计
#博客内容清单
create table blog_content(
blog_id int NOT NULL comment '博客编号',
blog__topic varchar(80) comment '博客标题',
blog_content TEXT(65535) comment '博客内容',
blog_time DATETIME comment '发布时间',
PRIMARY KEY (`blog_id`)
);
alter table blog_content MODIFY blog_id INT AUTO_INCREMENT;
#评论,外键
create table blog_remark (
id int NOT NULL comment '评论编号',
topic varchar(100) comment '博客标题',
comment TEXT(65535) comment '评论内容',
cmt_time DATETIME comment '评论时间',
blog_id int comment '评论的博客id',
CONSTRAINT fk_bc_bc
FOREIGN KEY (blog_id)
REFERENCES blog_content(blog_id)
);