python数据库操作

这个博客介绍了如何使用Python的pymysql模块进行数据库连接、数据操作,并结合logging模块实现日志记录。内容包括连接数据库、执行SQL(插入、查询、更新数据)、创建数据库以及数据库关闭等操作,同时确保在遇到异常时能正确处理并记录日志。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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()
        # YYYY-MM-DD日期格式
        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)
# ----------------------------------------- 向数据库写入SQL -----------------------------------------
def sql_set(self, sql, data=None):
    """
    发送SQL数据
    :param sql: 要发送的信息
    :param data: 要发送的数据
    :return: 无
    """
    try:
        # 输出数据用以调试
        # print('SQL:' + str(sql))
        # pint('data:' + str(data.values()))
        if data is None:
            self.cursor.execute(sql)
        else:
            self.cursor.execute(sql, tuple(data.values()))
        self.content.commit()  # 执行sql语句(数据表内容有更新,必须使用到该语句)
        logging.info('SQL执行成功!')
    except Exception as e:
        logging.warning('SQL执行失败:')
        logging.warning(e)
        self.content.rollback()  # 发生错误时回滚

# ----------------------------- 多字段动态插入mysql数据库中 ------------------------------------
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()    # 获取所有记录列表

# ----------------------------- 多字段动态更新mysql数据库中 -----------------------------------
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()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值