python数据库操作
import datetime
from pymysql import *
import logging
class Mysql:
def __init__(self, host='127.0.0.1', user='root', passwd=None, port=3306, database=None, charset='utf8'):
"""
初始化MySQL数据库
:param host: 数据库服务器IP地址
:param user: 数据库用户名
:param passwd: 数据库密码
:param port: 数据库端口
:param database: 要连接的数据库
:param charset: 数据库编码格式
"""
now = datetime.datetime.now()
date_now = now.date()
self.file_name = '日志文件名_' + str(date_now) + '.log'
self.file = open(self.file_name, encoding="utf-8", mode="a")
logging.basicConfig(
stream=self.file,
level=logging.INFO,
datefmt='%Y/%m/%d %H:%M:%S',
format='%(asctime)s - %(name)s - %(levelname)s - %(message)s'
)
try:
self.content = connect(host=host, port=port, user=user,
passwd=passwd, db=database, charset=charset)
self.cursor = self.content.cursor()
logging.info('数据库链接成功!')
except Exception as e:
logging.warning('数据库链接错误:')
logging.warning(e)
def sql_set(self, sql, data=None):
"""
发送SQL数据
:param sql: 要发送的信息
:param data: 要发送的数据
:return: 无
"""
try:
if data is None:
self.cursor.execute(sql)
else:
self.cursor.execute(sql, tuple(data.values()))
self.content.commit()
logging.info('SQL执行成功!')
except Exception as e:
logging.warning('SQL执行失败:')
logging.warning(e)
self.content.rollback()
def list_insert(self, table, data):
"""
将数据写入数据库
:param table: 表名
:param data: 是字典,存放要写入的数据
:return:
"""
keys = ', '.join(data.keys())
values = ', '.join(['%s'] * len(data))
sql = 'INSERT INTO {table} ({keys}) VALUES ({values})'.format(table=table, keys=keys, values=values)
self.sql_set(sql, data)
def set_lib(self, database):
"""
创建数据库
:param database: 要创建的库名
:return: 无
"""
sql = 'CREATE DATABASE ' + database
self.sql_set(sql)
def get_data(self, table, line, data):
"""
查找数据库数据
:param table: 表名
:param line: 键名
:param data: 要搜索的数据
:return: 记录列表
"""
data = "'{date}'".format(date=data)
sql = 'SELECT * FROM ' + table + ' WHERE ' + line + ' = ' + data
self.sql_set(sql)
return self.cursor.fetchall()
def list_update(self, table, data):
"""
更新列表
:param table: 表名
:param data: 是字典,存放要写入的数据
:return: 无
"""
keys = ', '.join(data.keys())
values = ', '.join(['%s'] * len(data))
sql = 'INSERT INTO {table} ({keys}) VALUES ({values}) ON DUPLICATE KEY UPDATE'\
.format(table=table, keys=keys, values=values)
update = ','.join([" {key} = %s".format(key=key) for key in data])
sql += update
self.sql_set(sql, data)
def end(self):
"""
关闭数据库
:return: 无
"""
try:
self.content.close()
logging.info('数据库关闭成功!')
except Exception as e:
logging.warning('数据库关闭失败:')
logging.warning(e)
self.file.close()