python连接数据库与增删改查(MySQL、GBase)

本文介绍了如何使用Python的pandas库配合pymysql和psycopg2连接MySQL和Gbase数据库,提供了连接、插入、查询、删除以及异常处理的代码示例,包括如何切换不同数据库类型的操作。
摘要由CSDN通过智能技术生成

目录

一、相关库

二、代码


一、相关库

由于工作中需要用到pandas对数据库表的查询、计算、插入、删除等操作,需要使用Python连接数据库并进行操作,于是写了一个DataBase类,实现对MySQL、Gbase数据库的连接,用到的Python库主要是pymysql、psycopg2。

pymysql是一个纯Python实现的MySQL客户端库,用于连接和操作MySQL数据库。

安装方式:

pip install pymysql

psycopg2用于连接和操作PostgreSQL数据库,它是对libpq(PostgreSQL的C语言库)的封装,为Python提供了一个高效且功能丰富的接口来与PostgreSQL数据库进行交互。GBase作为基于PostgreSQL内核开发的数据库产品,自然也可以使用psycopg2进行连接。

安装方式:

pip install psycopg2

二、代码

python连接数据库并进行增删改查操作的代码如下所示:

如果需要连接其他数据库,只需要更改db_connection方法,例如连接sqlite数据库:sqlite3.connect('./test.db')。

import pandas as pd
import pymysql
import psycopg2
import logging
logger = logging.getLogger(__name__)
logger.info("Start print log")

class DataBase(object):
    def __init__(self,db_type,host,user,password,database_name,port):
        self.db_type = db_type
        self.host = host
        self.user = user
        self.password = password
        self.database_name = database_name
        self.port = port
    
    def db_connection(self):
        if self.db_type=='mysql':
            return pymysql.connect(
                host=self.host,
                user=self.user,
                password=self.password,
                database=self.database_name,
                port=self.port,
                charset="utf8")
        elif self.db_type=='gbase':   
            return psycopg2.connect(
                host=self.host,
                user=self.user,
                password=self.password,
                database=self.database_name,
                port=self.port)
        else:
            return None
    
    # 批量插入
    def insert_table_to_sql(self, sql, valuelist):
        conn = self.db_connection()
        cur = conn.cursor()
        try:
            cur.executemany(sql, valuelist)
            conn.commit()
        except Exception as e:
            conn.rollback()
            logger.error("插入数据失败:{}。错误:{}".format(sql,e))
        finally:
            cur.close()
            conn.close()
    
    # 查询数据库
    def select_table_by_sql(self, sql):
        try:
            conn = self.db_connection()
            cur = conn.cursor()
            cur.execute(sql)
            data = cur.fetchall()
            columnDes = cur.description
            columnNames = [columnDes[i][0] for i in range(len(columnDes))]
            df = pd.DataFrame([list(i) for i in data], columns=columnNames)
            return df
        except Exception as e:
            logger.error("查询数据失败:{}。错误:{}".format(sql,e))
            return None
        finally:
            cur.close()
            conn.close()
    
    #增删改操作
    def execute_sql(self, sql):
        conn = self.db_connection()
        cur = conn.cursor()
        try:
            cur.execute(sql)
            conn.commit()
        except Exception as e:
            conn.rollback() 
            logger.error("SQL执行失败:{}。错误:{}".format(sql,e))
        finally:
            cur.close()
            conn.close()

调用示例如下所示:

db = DataBase('pymysql','localhost','root','root','test',3306)
#查询
df = db.select_table_by_sql("select * from table_name")
#删除
db.execute_sql("drop table table_name")

#批量插入
data=tuple([tuple(i) for i in df.values])
sql = '''insert into table_name(id, name)
                values (%s,%s)
             '''
db.insert_table_to_sql(sql,data)

#切换GBase
db2 = DataBase('gbase','localhost','root','root','test',15400)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

唯余木叶下弦声

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值
>