使用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