Python之数据库操纵工具
前言
- 基于原生模块:pymysql
- 推荐教程
- Python 数据库处理的类库
- pymysql [python原生模块]
- SQLAchemy [ORM框架]
- Python3 MySQL 数据库连接 - 菜鸟教程
- Python 数据库处理的类库
- 小工具结构
- DatabaseUtil([databseName])
- getConnection()
- query(sql)
- save(sql)
- delete(sql)
- closeResources(cursor,connection)
- DatabaseUtil([databseName])
源码
import pymysql # 导入mysql模块
## 数据库操纵工具
class DatabaseUtil:
"""
database util / 数据库操纵工具
------------------------------
[特别注意]
+ pymysql.connect(...)函数
+ unix_socket
+ 本字段是使用 socket 连接才用到的,而我们使用的是IP连接
+ 故:unix_socket='/tmp/mysql.sock' 改成 port=3306
"""
className = "DatabaseUtil";
def __init__(self,database='default_db_name'):
self.host='xxxx.com.cn';
self.port = 3306;
# unix_socket= "/tmp/mysql.sock",//module 'socket' has no attribute 'AF_UNIX'
self.user='root';
self.password='root';
self.database=database;
self.charset='utf8mb4';
self.cursorclass=pymysql.cursors.DictCursor;
pass;
def getConnection(self):
connection = None;
connection = pymysql.connect(host=self.host,
port=self.port,
# unix_socket= "/tmp/mysql.sock",//module 'socket' has no attribute 'AF_UNIX'
user=self.user,
password=self.password,
database=self.database,
charset=self.charset,
cursorclass=self.cursorclass);
# 切换数据库子模式
# cursor.execute("USE "+str(self.database)); # 形如: USE db_demoDatabase
# 使用cursor()方法创建一个游标对象
# cursor = connection.cursor();
if connection == None:
print("[",self.className,".getConnection] Fail to load and get database Connection!");
return connection;
pass;
def query(self,sql):## 查 select
# sql = "select * from tb_url limit 0,1000"; # just for test
print("[",self.className,".query] SQL:",sql);
connection = self.getConnection();
cursor = connection.cursor();
try:
cursor.execute(sql) # 执行SQL语句
# sql = "select * from userinfo where username=%(u)s and password=%(p)s"
# cursor.execute(sql,user,pwd) #直接传值
# cursor.execute(sql,[user,pwd]) #列表形式
# cursor.execute(sql,{'u':user,'p':pwd}) #字典格式
# print("row number:",(cursor.rownumber))
# print("rowcount:",cursor.rowcount); # 只读属性,并返回执行execute()方法后影响的行数
# 获取所有记录列表
#results = print("row [1]: ", cursor.fetchone()); # 获取下一个查询结果集。结果集是一个对象
if cursor.rowcount < 1:
print("[",self.className,".query] Not found any data from database!")
return;
results = None; # 初始化
# + cursor.fetchone() 获取下一行数据,第一次为首行
# + cursor.fetchall() 获取所有行数据源
# + cursor.fetchmany(n) 获取下N行数据
results = cursor.fetchall(); # 接收全部的返回结果行.
# print("results:",results);
# print("results[0]:",results[0]);
i = 0; #记录计数
for row in results: # row :字典类型
object = [];#存储各字段信息
for key in row:
object.append(row[key]);
# print("[", i , "] " , key , " : " , row[key]);
pass;
i+=1;
# 打印结果
# print("Url {\n\tpk_url_id:%s,\n\tstate:%s,\n\turl:%s,\n\tresolve_type:%s,\n\tresolver_class_bean:%s\n}" % (object[0], object[1], object[2], object[3], object[4]))
except e:
print("[",self.className,".query] ",e.message);
print("[",self.className,".query] Error: unable to fetch data!")
pass;
self.closeResources(cursor,connection);
return results; # 以结果行为字典类型的数组 [{ key1:value1, key2:value2 }]
pass;
def save(self,sql): ## 插 insert / 更新 update
# sql = "UPDATE EMPLOYEE SET AGE = AGE + 1 WHERE SEX = '%c'" % ('M')
# sql = "insert into tb_url values('2','WAITING_RESOLVE','http://test.for.python.mysql.cn','article/author','resolver_class_bean:Unknown')";
print("[",self.className,".save] SQL:",sql);
connection = self.getConnection();
cursor = connection.cursor();
result = -100; # 初始化一个异常值
try:
# 执行sql语句
result = cursor.execute(sql);
# print("[",className,".insert] the last rowId is ",cursor.lastrowid) # 当表中有自增的主键的时候,可以使用lastrowid来获取最后一次自增的ID
# 提交到数据库执行
connection.commit();
except:
# 如果发生错误则回滚
connection.rollback();
pass;
self.closeResources(cursor,connection);
if result == 1:
print("[",self.className,".save] Done!");
else:
print("[",self.className,".save] Failed!")
pass;
# print("[",self.className,".insert] result:",result)
return result;
pass;
def delete(self,sql): # 删除 delete
# sql = "DELETE FROM EMPLOYEE WHERE AGE > %s" % (20)
print("[",self.className,".delete] SQL:",sql);
connection = self.getConnection();
cursor = connection.cursor();
result = -100; # 初始化一个异常值
try:
# 执行sql语句
result = cursor.execute(sql);
# print("[",className,".insert] the last rowId is ",cursor.lastrowid) # 当表中有自增的主键的时候,可以使用lastrowid来获取最后一次自增的ID
# 提交到数据库执行
connection.commit();
except:
# 如果发生错误则回滚
connection.rollback();
pass;
self.closeResources(cursor,connection);
if result == 1:
print("[",self.className,".delete] Done!");
else:
print("[",self.className,".delete] Failed!")
pass;
# print("[",self.className,".insert] result:",result)
return result;
pass;
def closeResources(self,cursor,connection):
try:
cursor.close() # 关闭数据库游标对象
connection.close() # 关闭数据库连接
pass;
except e:
print (e.message);
pass;
pass;
pass; # class end
Demo
# 插 / 更新
# sql = "insert into tb_url values('5','WAITING_RESOLVE','http://test.for.python.mysql.cn','article/author','resolver_class_bean:Unknown')";
# print(dbUtil.save(sql));
# 删
# for i in range(2,5):[2,5)
# sql = "delete from tb_url where pk_url_id='%d'" % (i);
# dbUtil.delete(sql);
# pass;
# 查
sql = "select * from tb_url where pk_url_id='%s'" % ('5');
print(dbUtil.query(sql));
//output
[ DatabaseUtil .query] SQL: select * from tb_url where pk_url_id='5'
[{'pk_url_id': 5, 'state': 'WAITING_RESOLVE', 'url': 'http://test.for.python.mysql.cn', 'resolve_type': 'article/author', 'resolver_class_bean': 'resolver_class_bean:Unknown'}]
Python之数据库操纵工具的更多相关文章
- Python接口测试实战3(上)- Python操作数据库
如有任何学习问题,可以添加作者微信:lockingfree 课程目录 Python接口测试实战1(上)- 接口测试理论 Python接口测试实战1(下)- 接口测试工具的使用 Python接口测试实战 ...
- 10分钟教你Python+MySQL数据库操作
欲直接下载代码文件,关注我们的公众号哦!查看历史消息即可! 本文介绍如何利用python来对MySQL数据库进行操作,本文将主要从以下几个方面展开介绍: 1.数据库介绍 2.MySQL数据库安装和设置 ...
- 数据库——可视化工具Navicat、pymysql模块、sql注入问题
数据库--可视化工具Navicat.pymysql模块.sql注入问题 Navicat可视化工具 Navicat是数据库的一个可视化工具,可直接在百度搜索下载安装,它可以通过鼠标"点点点&q ...
- Python进阶----数据库的基础,关系型数据库与非关系型数据库(No SQL:not only sql),mysql数据库语言基础(增删改查,权限设定)
day37 一丶Python进阶----数据库的基础,mysql数据库语言基础(增删改查,权限设定) 什么是数据库: 简称:DataBase ---->DB 数据库即存放数据的仓库, ...
- Python的包管理工具Pip (zz )
Python的包管理工具Pip 接触了Ruby,发现它有个包管理工具RubyGem很好用,并且有很完备的文档系统http://rdoc.info 发现Python下也有同样的工具,包括easy_ins ...
- python操作数据库
一,安装mysql 如果是windows 用户,mysql 的安装非常简单,直接下载安装文件,双击安装文件一步一步进行操作即可. Linux 下的安装可能会更加简单,除了下载安装包进行安装外,一般的l ...
- 数据库修复工具 - DatabaseCompressor 之从9M到900K+
数据库修复工具 - 仅限 *.mdb 格式的Access 数据库 引言: Access数据库操作有一严重Bug,当数据库文件内容添加�时,其文件容量随之添加�,但当删除数据库内容时,其数据库容量不会对 ...
- python+mysql数据库的简单操作
最近接了一个任务,测试某项类似于收益情况报表的功能,因计算公式复杂,单纯手算过于复杂,所以想到写成脚本 根据python的分治原则,先整了几个函数用于实现计算逻辑,后发现数据输入过于繁琐,所以决定使用 ...
- SQLCLUSTER sql数据库监测工具
SQLCLUSTER sql数据库监测工具
随机推荐
- gcd(欧几里得算法)与exgcd(扩展欧几里得算法)
欧几里得算法: 1.定义:gcd的意思是最大公约数,通常用扩展欧几里得算法求 原理:gcd(a, b)=gcd(b, a%b) 2.证明: 令d=gcd(a, b) => a=m*d,b=n ...
- Django 中 cookie的使用
Cookie是浏览器在客户端留下的一段记录,这段记录可以保留在内存或者硬盘上.因为Http请求是无状态的,通过读取cookie的记录,服务器或者客户端可以维持会话中的状态.比如一个常见的应用场景就是登 ...
- (三) 结构化查询语言SQL——1
1. SQL概述 SQL,结构化查询语言,重要性不必在赘述了,基本上开发软件没有不用到的,此外在一些大数据也有广泛的应用.SQL主要包含数据定义语言(DDL).数据操纵语言(DML)以及数据控制语言( ...
- loj2718 「NOI2018」归程[Kruskal重构树+最短路]
关于Kruskal重构树可以翻阅本人的最小生成树笔记. 这题明显裸的Kruskal重构树. 然后这题限制$\le p$的边不能走,实际上就是要满足走最小边权最大的瓶颈路,于是跑最大生成树,构建Krus ...
- 为什么重写equals()方法就必须重写hashCode()方法
hashCode()和equals()保持一致,如果equals方法返回true,那么两个对象的hasCode()返回值必须一样.如果equals方法返回false,hashcode可以不一样,但是这 ...
- Spark配置详解
Spark提供三个位置用来配置系统: Spark属性:控制大部分的应用程序参数,可以用SparkConf对象或者Java系统属性设置 环境变量:可以通过每个节点的 conf/spark-env.sh脚 ...
- Spring Security 解决X-Frame-Options deny
错误信息: Refused to display 'https://github.com/hwclass/awesome-sound' in a frame because it set 'X-Fra ...
- django环境配置(基于命令行安装)
一.django简介 Python服务端开发框架,Django是一个开放源代码的Web应用框架,由Python写成,Django采用了MVC的软件设计模式,即模型M,视图V和控制器C 二.安装配置dj ...
- 博弈dp入门 POJ - 1678 HDU - 4597
本来博弈还没怎么搞懂,又和dp搞上了,哇,这真是冰火两重天,爽哉妙哉. 我自己的理解就是,博弈dp有点像对抗搜索的意思,但并不是对抗搜索,因为它是像博弈一样,大多数以当前的操作者来dp,光想是想不通的 ...
- 推荐系统系列(二):FFM理论与实践
背景 在CTR/CVR预估任务中,除了FM模型[2] 之外,后起之秀FFM(Field-aware Factorization Machine)模型同样表现亮眼.FFM可以看作是FM的升级版,Yuch ...