pymysql模块使用
一、写函数的原因
写这个函数的原因就是为了能够不每次在用Python用数据库的时候还要在写一遍 做个通用函数做保留,也给大家做个小小的分享,函数不是最好的,希望有更好的代码的朋友能提出 互相学习
二、函数代码
PS:代码是用Python3.6 写的
import pymysql class mysql (object):
def __init__(self, dbconfig):
"""
初始化连接信息
:param dbconfig: 连接信息的字典
"""
self.host = dbconfig['host']
self.port = dbconfig['port']
self.user = dbconfig['user']
self.passwd = dbconfig['passwd']
self.db = dbconfig['db']
self.charset = dbconfig['charset']
self._conn = None
self._connect()
self._cursor = self._conn.cursor () def _connect(self):
"""
连接数据库方法
:return:
"""
try:
self._conn = pymysql.connect (host=self.host, port=self.port, user=self.user, passwd=self.passwd,
db=self.db, charset=self.charset)
except pymysql.Error as e:
print(e) def query(self, sql):
try:
result = self._cursor.execute (sql)
except pymysql.Error as e:
print(e)
result = False
return result def select(self, table, column='*', condition=''):
"""
查询数据库方法
:param table: 库里面的表
:param column: 列字段
:param condition: 条件语句 (where id=1)
:return:
"""
condition = ' where ' + condition if condition else None
if condition:
sql = "select %s from %s %s" % (column, table, condition)
# print(sql)
else:
sql = "select %s from %s" %(column, table)
# print(sql)
self.query (sql)
return self._cursor.fetchall() def insert(self,table,tdict):
"""
插入数据库方法,replace去重插入 insert不去重插入
:param table: 表名
:param tdict: 要插入的字典
:return:
"""
column = ''
value = ''
for key in tdict:
column += ',' + key
value += "','" + tdict[key]
column = column[1:]
value = value[2:] + "'" sql = "replace into %s(%s) values(%s)" %(table,column,value) # 去重
# sql = "insert into %s(%s) values(%s)" %(table,column,value) # 不去重
self._cursor.execute(sql)
self._conn.commit()
return self._cursor.lastrowid def update(self,table,tdict,condition=''):
"""
更新数据库方法
:param table: 表名
:param tdict: 更新数据库数据字典
:param condition: 条件语句 (where id=1)
:return:
"""
if not condition:
print('must have id')
exit()
else:
condition = 'where ' + condition
value = ''
for key in tdict:
value += ",%s='%s'" %(key,tdict[key])
value = value[1:]
sql = "update %s set %s %s" %(table,value,condition)
# print(sql)
self._cursor.execute(sql)
self._conn.commit()
return self.affected_num() def delete(self,table,condition=''):
"""
删除方法
:param table: 表名
:param condition: 条件语句 (where id=1)
:return:
"""
condition = ' where ' + condition if condition else None
sql = "delete from %s %s" %(table,condition)
# print(sql)
self._cursor.execute(sql)
self._conn.commit()
return self.affected_num() def all(self,*args):
"""
可以执行所有的SQL语句 相当于登录到数据库执行,就是返回结果没有做处理 后期会更新
:param args: SQL 语句(select * from ssh)
:return:
"""
sql = input("请输入SQL语句>>:")
sql = "%s" %sql
self._cursor.execute (sql)
self._conn.commit ()
return self._cursor.fetchall () def rollback(self):
"""
数据库的事务
:return:
"""
self._conn.rollback() def affected_num(self):
"""
受影响的条数
:return:
"""
return self._cursor.rowcount def int_to_ip_or_ip_to_int(self,method,num,ip=''):
"""
主要是对数据库的IP和数值之间的转换
:param method: 转换方法两种(inet_ntoa,inet_aton)
:param num: 数值
:param ip: IP地址
:return:
"""
if method == 'inet_ntoa':
sql = "select %s(%s)" %(method,num)
elif method == 'inet_aton':
sql = "select %s(%s)" %(method,ip)
self.query(sql)
return self._cursor.fetchall() def __del__(self):
"""
关闭连接
:return:
"""
try:
self._cursor.close ()
self._conn.close ()
except:
pass def close(self):
"""
关闭连接
:return:
"""
self.__del__ () # 函数的使用
if __name__ == '__main__':
dbconfig = {
'host': '192.168.163.129', # MySQL地址
'port': 3306, # 端口
'user': 'root', # 用户名
'passwd': '123456', # 密码
'db': 'com_hosts', # 数据库
'charset': 'utf8', # 字符集
}
db = mysql (dbconfig) # 初始化函数 # 查询
print(db.select ('ssh'))
# 更新
print(db.update('ssh', tdict, 'Id=2'))
# 插入
print(db.insert('ssh',tdict))
# 删除
print(db.delete('ssh','Id=6')) # 执行SQL语句
while True:
a = db.all()
for i in a:
print(i)
db.close()
三、未实现功能(后续更新)
其实代码的结果最好都是元祖,没有对结果进行数据格式化显示,后期会更新,大家用的时候根据需求对数据进行一些处理就好了,其实在公司是想写个MySQL的管理平台的,以后写好了会更新,也希望大家一起学习,可以QQ我
pymysql模块使用的更多相关文章
- Python中操作mysql的pymysql模块详解
Python中操作mysql的pymysql模块详解 前言 pymsql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同.但目前pymysql支持python3.x而后者不支持 ...
- python实战第一天-pymysql模块并练习
操作系统 Ubuntu 15.10 IDE & editor JetBrains PyCharm 5.0.2 ipython3 Python版本 python-3.4.3 安装pymysql模 ...
- pymysql 模块介绍
pymysql模块是python与mysql进行交互的一个模块. pymysql模块的安装: pymysql模块的用法: import pymysql user=input('user>> ...
- Mysql(六):数据备份、pymysql模块
一 IDE工具介绍 生产环境还是推荐使用mysql命令行,但为了方便我们测试,可以使用IDE工具 下载链接:https://pan.baidu.com/s/1bpo5mqj 掌握: #1. 测试+链接 ...
- python如何使用pymysql模块
Python 3.x 操作MySQL的pymysql模块详解 前言pymysql是Python中操作MySQL的模块,其使用方法和MySQLdb几乎相同.但目前pymysql支持python3.x而M ...
- MySQL之pymysql模块
MySQL之pymysql模块 import pymysql #s链接数据库 conn = pymysql.connect( host = '127.0.0.1', #被连接数据库的ip地址 po ...
- PyMySQL模块的使用
PyMySQL介绍 PyMySQL是在Python3.x版本中用于连接MySQL服务器的一个库,Python2系列中则使用mysqldb.Django中也可以使用PyMySQL连接MySQL数据库. ...
- MySQL学习12 - pymysql模块的使用
一.pymysql的下载和使用 1.pymysql模块的下载 2.pymysql的使用 二.execute()之sql注入 三.增.删.改:conn.commit() 四.查:fetchone.fet ...
- 数据库入门-pymysql模块的使用
一.pymysql模块安装 由于本人的Python版本为python3.7,所以用pymysql来连接数据库(mysqldb不支持python3.x) 方法一: #在cmd输入 pip3 instal ...
- Python连接MySQL数据库之pymysql模块使用
安装PyMySQL pip install pymysql PyMySQL介绍 PyMySQL是在python3.x版本中用于连接MySQL服务器的一个库,2中则使用mysqldb. Django中也 ...
随机推荐
- Unicode、UTF-8 和 ISO8859-1
Unicode.UTF-8 和 ISO8859-1到底有什么区别 1.本文主要包括以下几个方面:编码基本知识,java,系统软件,url,工具软件等. 在下面的描述中,将以"中文" ...
- Django入门指南-第9章:静态文件设置(完结)
http://127.0.0.1:8000 #下一步是告诉Django在哪里可以找到静态文件.打开settings.py,拉到文件的底部,在STATIC_URL后面添加以下内容: STATICFILE ...
- struct的使用
编写一个学生struct,成员有学号(id).姓名(name).成绩(5门课程),随机生成多个学生的学号.姓名和成绩存储到结构体数组.再根据总分进行排名并输出学生的信息和总分. stu.h #ifnd ...
- 山东省第七届ACM竞赛 C题 Proxy (Dijkstra算法,单源路径最短问题)
题意:给定0-n+1个点,和m条边,让你找到一条从0到n+1的最短路,输出与0相连的结点... 析:很明显么,是Dijkstra算法,不过特殊的是要输出与0相连的边,所以我们倒着搜,也是从n+1找到0 ...
- scrapy windows 安装
windows 7 系统下参照官网安装总是会提示出错,现在整理一下安装的流程 1.安装 python 2.7,添加环境变量 C:\Python27\;C:\Python27\Scripts\; 在 C ...
- AE IRasterCursor 获取栅格图层像素值
在编写使用栅格图层的代码时,常常要获取栅格图层的像素值(PixelValue).如果想获取某一点的像素值,可以使用IRaster2中的getPixelValue方法.但如果想要获得的是图层中的某一块甚 ...
- (最短路) Heavy Transportation --POJ--1797
链接: http://poj.org/problem?id=1797 Heavy Transportation Time Limit: 3000MS Memory Limit: 30000K To ...
- 17、docker多机网络通信overlay
理论上来说多台宿主机之间的docker容器之间是无法通讯的,但是多台宿主机之间的docker容器之间是可以通讯的,主要是通过VXLAN技术来实现的. GitHub上对于docker-overl ...
- 通过FactoryBean方式来配置bean
1.实现FactoryBean接口的java类: 2.相应的.xml文件:
- 使用for in循环遍历json对象的数据
使用for in遍历json对象数据,如果数据中的名称有为数字的话,只对正整数有效,那么先会输出为正整数的数据,后面其他的会按照原来数据中定义的顺序不变输出. 针对名称为数字的json对象数据进行测试 ...