自己整理的python对mysql的常用操作,封装成函数直接调用

15 篇文章 0 订阅

把自己平常经常使用的对mysql操作的函数整理了一下,主要是使用dataframe来操作,同时封装了数据库的连接,提交等操作,这样只需要传入参数和数据就可以了。分享给有需要的朋友,节约造轮子的时间。

from sqlalchemy import create_engine
import pymysql
import pandas as pd

'''
author:LancerWu
email:wuxs231@163.com
'''


def df_to_sql(engine_conn, data, table_name):
    '''
    datafrme格式的数据直接写入数据库
    :param engine_conn:数据库连接引擎
    :param data:要存入的字典格式格式的数据
    :param table_name:要存的表名
    :return:
    '''
    try:
        # list形式的字典转为dataframe格式
        df = pd.DataFrame(data)
        # 创建连接数据库的引擎
        engine = create_engine('%s' % engine_conn)
        # 写入数据
        df.to_sql(name=table_name, con=engine, if_exists='append', index=False, index_label=False)
        # 关闭engine的连接
        engine.dispose()
        print('写入数据库成功')

    except Exception as e:
        print('dataframe存入数据库失败:%s' % e)
        return None


def list_to_df_to_sql(tb_name, cols, rows, engine_conn):
    '''
    list转dict转df
    :param tb_name:表名
    :param cols:列字段
    :param rows:行数据,仅限一行
    :param engine_conn:数据库连接引擎
    :return:
    '''
    try:
        # 先把列和行转成字典
        dict_temp = dict(zip(cols, rows))
        # 再把字典转换成list
        list_temp = [dict_temp]
        # 最后转为dataframe
        df = pd.DataFrame(list_temp)
        # 构造连接数据库的引擎
        engine = create_engine('%s' % engine_conn)
        # df写入数据库
        df.to_sql(name=tb_name, con=engine, if_exists='append', index=False, index_label=False)
        # 关闭连接引擎
        engine.dispose()
        print('写入数据库成功')

    except Exception as e:
        print('list存入数据库失败:%s' % e)
        return None


def sql_to_df(engine_info, sql):
    '''
    数据库读取为dataframe格式
    :param engine_info:数据库连接引擎
    :param sql:操作的sql语句
    :return:
    '''
    try:
        # 创建数据库连接引擎
        engine = create_engine(engine_info)
        # 从数据库读取结果为dataframe
        df_query = pd.read_sql(sql, engine)
        # 关闭数据库连接
        engine.dispose()
        print('数据库读取完毕', df_query.head())
        # 转为字典list
        data = df_query.to_dict(orient='dict')
        return data

    except Exception as e:
        print('从数据库读取为df失败:%s' % e)
        return None


def sql_caozuo(sql, conn):
    '''
    使用sql语句从数据库中一次性读取
    :param sql:操作的说sql语句
    :param conn:数据库连接的字典
    :return:
    '''
    try:
        # 连接数据库
        conn = pymysql.connect(**conn)
        cur = conn.cursor()
        # 提交sql语句
        cur.execute(sql)
        # 获取查询结果
        results = cur.fetchall()
        # 提交事务执行
        conn.commit()
        # 关闭连接
        cur.close()
        conn.close()

        return results

    except Exception as e:
        print('数据库操作失败:%s' % e)
        return None


if __name__=="__main__":
    # 数据库操作配置参数
    engine_conn = 'mysql+pymysql://(mysql帐号):(帐号密码)@(ip):(端口号)/(table)?charset=utf8'
    pymysql_conn = {
        'host': "",  # ip地址
        'port': 3306,  # 端口号,默认3306
        'user': "",  # mysql帐号
        'password': "",  # 帐号密码
        'db': "",  # 数据库名称
        'charset': 'utf8'  # 编码类型
    }
    sql = "select * from table;"

    # 1、执行数据库查询语句操作
    query_result = sql_caozuo(sql, pymysql_conn)
    print('查询结果', query_result)

    # 2、从数据库查询数据并直接变成dataframe
    data = sql_to_df(engine_conn, sql)  # data为df转化的list,其中包含字典数据
    print('data', data)

    # 3、list插入到数据库
    tb_name = 'test'  # 数据库中要插入的表名
    cols = ['col1', 'col2', 'col3']  # 字段名,要跟数据库现有的字段一一对应
    rows = ['data1', 'data2', 'data3']  # 数据行,要跟cols一一对应,注意跟数据库的字段的数据类型是否匹配
    list_to_df_to_sql(tb_name, cols, rows, engine_conn)

    # 4、dataframe插入到数据库
    data = [{
        'col1': 'data1',
        'col2': 'data2',
        'col3': 'data3'

    }]  # list中装载字典数据
    df_to_sql(engine_conn, data, tb_name)

源码地址:
https://github.com/wuxs231/python_mysql_operation

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以帮你将MySQL的增删查改操作封装类和函数。在进行操作之前,你需要安装PythonMySQL驱动程序,可以通过以下命令安装pymysql: ``` pip install pymysql ``` 接下来,我们可以将MySQL的增删查改操作封装一个类,如下所示: ```python import pymysql class MySQL: def __init__(self, host, user, password, db): self.host = host self.user = user self.password = password self.db = db self.conn = pymysql.connect(host=self.host, user=self.user, password=self.password, db=self.db) def execute(self, sql): cursor = self.conn.cursor() cursor.execute(sql) self.conn.commit() cursor.close() def select(self, sql): cursor = self.conn.cursor() cursor.execute(sql) result = cursor.fetchall() cursor.close() return result def insert(self, table, data): keys = ','.join(data.keys()) values = ','.join(['%s'] * len(data)) sql = 'INSERT INTO {table}({keys}) VALUES ({values})'.format(table=table, keys=keys, values=values) self.execute(sql, tuple(data.values())) def update(self, table, data, condition): data = ','.join(['{0}=%s'.format(key) for key in data]) sql = 'UPDATE {table} SET {data} WHERE {condition}'.format(table=table, data=data, condition=condition) self.execute(sql, tuple(data.values())) def delete(self, table, condition): sql = 'DELETE FROM {table} WHERE {condition}'.format(table=table, condition=condition) self.execute(sql) ``` 这个类包含了MySQL的增删查改操作,可以根据需要进行调用。现在我们可以通过以下代码来使用这个类: ```python mysql = MySQL('localhost', 'root', '123456', 'test') mysql.insert('student', {'name': '张三', 'age': 18, 'score': 90}) mysql.update('student', {'score': 95}, 'name="张三"') mysql.delete('student', 'name="张三"') result = mysql.select('SELECT * FROM student') print(result) ``` 除了类的方式,我们还可以将MySQL操作封装函数,如下所示: ```python import pymysql def mysql_execute(sql, data=None): conn = pymysql.connect(host='localhost', user='root', password='123456', db='test') cursor = conn.cursor() if data: cursor.execute(sql, data) else: cursor.execute(sql) conn.commit() cursor.close() conn.close() def mysql_select(sql): conn = pymysql.connect(host='localhost', user='root', password='123456', db='test') cursor = conn.cursor() cursor.execute(sql) result = cursor.fetchall() cursor.close() conn.close() return result ``` 这些函数分别对应MySQL的增删查改操作,可以根据需要进行调用。现在我们可以通过以下代码来使用这些函数: ```python mysql_execute('INSERT INTO student(name, age, score) VALUES (%s, %s, %s)', ('张三', 18, 90)) mysql_execute('UPDATE student SET score=%s WHERE name=%s', (95, '张三')) mysql_execute('DELETE FROM student WHERE name=%s', '张三') result = mysql_select('SELECT * FROM student') print(result) ``` 这些函数调用方式与类的调用方式有些不同,但它们都可以完MySQL的增删查改操作
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值