首页 技术 正文
技术 2022年11月20日
0 收藏 439 点赞 3,887 浏览 2326 个字
#学习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)
);
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,083
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,558
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,407
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,180
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:7,816
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:4,899