pymysql返回字典对象

本文介绍了一个使用 Python 和 pymysql 库进行 MySQL 数据库操作的方法。包括连接数据库、插入单条及多条记录、按条件查询、执行 SQL 语句删除及更新数据等基本功能,并采用线程锁来保证多线程环境下的数据安全性。

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

 

import pymysql
import threading

MYSQL_HOST = '192.168.1.248'
MYSQL_USER = 'moxiao'
MYSQL_PASSWORD = 'xxxx'
MYSQL_PORT = 3306
DATABASE = 'xxxx'
lock = threading.Lock()


class MysqlConn:
    def __init__(self, host=MYSQL_HOST, username=MYSQL_USER, password=MYSQL_PASSWORD, port=MYSQL_PORT,
                 database=DATABASE):
        """
        mysql 初始化
        :param host:
        :param username:
        :param password:
        :param port:
        """
        try:
            self.db = pymysql.Connection(host=host, user=username, password=password,
                                         database=database, port=port)
            self.cursor = self.db.cursor(cursor=pymysql.cursors.DictCursor) # TODO 最主要的一行。。。
        except pymysql.MySQLError as e:
            print(e.args)

    def insert(self, table, data):
        keys = ', '.join(data.keys())
        values = ', '.join(['%s'] * len(data))
        sql = 'insert into %s (%s) values (%s)' % (table, keys, values)
        try:
            self.cursor.execute(sql, tuple(data.values()))
            self.db.commit()
        except pymysql.MySQLError as e:
            print(e.args)
            self.db.rollback()

    def insert_many(self, table, data):
        if isinstance(data, list) or isinstance(data, tuple):
            keys = str(tuple(data[0].keys())).replace('(', '').replace(')', '').replace("'", '')
            sql = 'insert into %s (%s) value' % (table, keys) + ' (' + '%s, ' * (len(data[0].keys()) - 1) + '%s);'
            values = [tuple(d.values()) for d in data]
            if lock.acquire():
                try:
                    self.cursor.executemany(sql, values)
                    self.db.commit()
                except pymysql.MySQLError as e:
                    print(e.args)
                    self.db.rollback()
                finally:
                    lock.release()

    def find_key_val(self, table, key_val):
        sql = None
        if isinstance(key_val, str):
            sql = 'SELECT * FROM `%s` WHERE %s ;' % (table, key_val)
        elif isinstance(key_val, dict):
            sql_where = ''
            for item in key_val.items():
                row_str = str(item[0]) + '=' + str(item[1]) + ' and '
                sql_where += row_str
            sql_where = sql_where[:-4]
            sql = 'SELECT * FROM `%s` WHERE %s ;' % (table, sql_where)
        if sql:
            try:
                self.cursor.execute(sql)
                data = self.cursor.fetchall()
                if len(data) > 0:
                    return data
                return None
            except pymysql.MySQLError as e:
                print(e.args)
        return None

    def find_by_sql(self, sql):
        if sql:
            try:
                self.cursor.execute(sql)
                data = self.cursor.fetchall()
                if len(data) > 0:
                    return data
                return None
            except pymysql.MySQLError as e:
                print(e.args)
        return None

    def del_by_sql(self, sql):
        if sql:
            try:
                self.cursor.execute(sql)
                self.db.commit()
                return True
            except pymysql.MySQLError as e:
                print(e.args)
                self.db.rollback()
        return None

    def update_by_sql(self, sql):
        if sql:
            try:
                self.cursor.execute(sql)
                self.db.commit()
                return True
            except pymysql.MySQLError as e:
                print(e.args)
                self.db.rollback()
        return None

    def close(self):
        try:
            self.cursor.close()
        except:
            pass
        try:
            self.db.close()
        except:
            pass


if __name__ == '__main__':
    mc = MysqlConn()
    result = mc.find_by_sql('select * from tst;')
    print(result)

感谢 https://www.cnblogs.com/xibuhaohao/p/9996571.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值