python操作mysql——pymysql

博客介绍了使用pymysql操作MySQL数据库的方法,包括添加依赖、连接数据库、执行SQL语句、获取结果等步骤,还提到封装工具类实现数据库动态配置,后续可结合openpyxl将查询数据导入Excel做进一步处理。

使用pymysql操作mysql 数据库

添加依赖

pip install pymysql

连接数据库

# 导入模块
import pymysql.cursors

# 连接数据库
conn = pymysql.Connect(host="127.0.0.1",
                       port=3306,
                       user="root",
                       passwd='root',
                       db='db')
# 获取游标
cursor = conn.cursor()

执行sql语句

# 要执行的sql语句
sql = "select id from customer limit 10"

try:
    # 执行sql
    cursor.execute(sql)
    # 提交到数据库
    conn.commit()
except Exception:
    # 发生异常则回滚
    conn.rollback()

获取执行结果

# fetchone() 获取第一条结果数据
# fetchall() 获取全部结果数据
# fetchmany(size) 获取size条数据 从第一条开始
# 返回的数据为一个元组

print(cursor.fetchone()) 
print(cursor.fetchmany(5))
print(cursor.fetchall())
结果打印
需要注意数据只能从游标中取出一次  
输出结果:  
(1598,) # fetchone() 获取第一条数据   
((2306,), (1599,), (1600,), (2307,), (1601,)) # fetchmany(5) 获取5条数据 从第二条开始  
((1602,), (1603,), (1604,), (1605,)) # fetchall() 获取游标中剩下所有数据  

获取json数据

# 在上边的游标获取方法中添加如下参数即可
# 返回数据为json格式
cursor = conn.cursor(cursor=pymysql.cursors.DictCursor)
此时打印出来的结果
{'id': 1598}
[{'id': 2306}, {'id': 1599}, {'id': 1600}, {'id': 2307}, {'id': 1601}]
[{'id': 1602}, {'id': 1603}, {'id': 1604}, {'id': 1605}]

封装工具类

日常工作可能使用多个数据库连接来进行数据清洗等工作,把数据库进行动态配置

调用类
# db.py
import pymysql.cursors
import json


class Dao:

    def __init__(self, envir):
        """
        初始化数据库连接
        :param envir: 数据库连接环境  dev / test / pre / prod
        """
        self.connect = pymysql.Connect(**json.load(open('db-config.json', encoding='utf8'))[envir])

    def execute_sql(self, sql):
        pass

    def execute_fetchone(self, sql):
        """
        单条结果sql查询
        :param sql: 要执行的sql语句
        :return: 获取单条查询结果
        """
        cursor = self.connect.cursor(cursor=pymysql.cursors.DictCursor)
        try:
            # 执行sql语句
            cursor.execute(sql)
            # 提交到数据库执行
            self.connect.commit()
        except Exception:
            # 如果发生错误则回滚
            self.connect.rollback()

        return cursor.fetchone()

    def execute_fetchall(self, sql):
        """
        列表数据sql查询
        :param sql: 要执行的sql语句
        :return: 查询列表结果
        """
        cursor = self.connect.cursor(cursor=pymysql.cursors.DictCursor)
        try:
            # 执行sql语句
            cursor.execute(sql)
            # 提交到数据库执行
            self.connect.commit()
        except Exception:
            # 如果发生错误则回滚
            self.connect.rollback()

        return cursor.fetchall()

json配置 db-config.json
{
  "dev": {
    "host": "localost",
    "port": 3306,
    "user": "root",
    "passwd": "root",
    "db": "db"
  },

  "test": {
    "host": "test-host",
    "port": 3306,
    "user": "test",
    "passwd": "test",
    "db": "db"
  },

  "pre": {
    "host": "pre-host",
    "port": 3306,
    "user": "pre",
    "passwd": "pre",
    "db": "db"
  },

  "prod": {
    "host": "prod",
    "port": 3306,
    "user": "prod",
    "passwd": "prod",
    "db": "db"
  }
}
利用封装好的类执行之前的sql
dao = Dao('dev')
sql = "select id from customer limit 10"
res = dao.execute_fetchall(sql)
print(res)

# 输出结果
[{'id': 1598}, {'id': 2306}, {'id': 1599}, {'id': 1600}, {'id': 2307}]

之后就可以使用python 愉快的操作数据库了,后续可以根据需要结合openpyxl 把查询出来的数据导入excel做进一步处理。

以上 over

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值