Python实现mysql数据库更新表数据接口的功能


Posted in Python onNovember 19, 2017

前言

昨天,因为项目需求要添加表的更新接口,来存储预测模型训练的数据,所以自己写了一段代码实现了该功能,在开始之前,给大家分享python 操作mysql数据库基础:

#coding=utf-8
import MySQLdb

conn= MySQLdb.connect(
    host='localhost',
    port = 3306,
    user='root',
    passwd='123456',
    db ='test',
    )
cur = conn.cursor()

#创建数据表
#cur.execute("create table student(id int ,name varchar(20),class varchar(30),age varchar(10))")

#插入一条数据
#cur.execute("insert into student values('2','Tom','3 year 2 class','9')")


#修改查询条件的数据
#cur.execute("update student set class='3 year 1 class' where name = 'Tom'")

#删除查询条件的数据
#cur.execute("delete from student where age='9'")

cur.close()
conn.commit()
conn.close()

>>> conn = MySQLdb.connect(host='localhost',port = 3306,user='root', passwd='123456',db ='test',)

Connect() 方法用于创建数据库的连接,里面可以指定参数:用户名,密码,主机等信息。

这只是连接到了数据库,要想操作数据库需要创建游标。

>>> cur = conn.cursor()

通过获取到的数据库连接conn下的cursor()方法来创建游标。

>>> cur.execute("create table student(id int ,name varchar(20),class varchar(30),age varchar(10))")

通过游标cur 操作execute()方法可以写入纯sql语句。通过execute()方法中写如sql语句来对数据进行操作。

>>>cur.close()

cur.close() 关闭游标

>>>conn.commit()

conn.commit()方法在提交事物,在向数据库插入一条数据时必须要有这个方法,否则数据不会被真正的插入。

>>>conn.close()

Conn.close()关闭数据库连接

下面开始本文的正文:

Python实现mysql更新表数据接口

示例代码

# -*- coding: utf-8 -*-
import pymysql
import settings

class mysql(object):
 def __init__(self):
  self.db = None

 def connect(self):

   self.db = pymysql.connect(host=settings.ip, port=settings.port, user=settings.mysql_user, passwd=settings.mysql_passwd, db=settings.database, )
  # print("connect is ok")
   # return 1
 def disconnect(self):
  self.db.close()
  # return -1

 def create_table(self, tablename, columns, spec='time'):
  """
  :param tablename:
  :param spec:
  :param columns: 列表[]
  :return:
  """

  type_data = ['int', 'double(10,3)']
  cursor = self.db.cursor()
  sql="create table %s("%(tablename,)
  sqls=[]
  for col in columns:
   #判断是否time_num
   if col==spec:
    sqls.append('%s %s primary key'%(col,type_data[0]))
   else:
    sqls.append('%s %s'%(col,type_data[1]))

  sqlStr = ','.join(sqls)
  sql+=sqlStr+')'
  try:
   cursor.execute(sql)
   print("Table %s is created"%tablename)
  except:
   self.db.rollback()

 def is_table_exist(self, tablename,dbname):
  cursor=self.db.cursor()
  sql="select table_name from information_schema.TABLES where table_schema='%s' and table_name = '%s'"%(dbname,tablename)
  #results="error:Thie table is not exit"
  try:
   cursor.execute(sql)

   results = cursor.fetchall() #接受全部返回行
  except:
   #不存在这张表返回错误提示
    raise Exception('This table does not exist')
  if not results:
    return None
  else :
   return results
 # print datas
 def insert_mysql_with_json(self, tablename, datas):
  """

  :param tablename:
  :param datas:字典{(key: value),.....}
  :return:
  """
  # keys = datas[0]
  keys = datas[0].keys()
  keys = str(tuple(keys))
  keys = ''.join(keys.split("'")) # 用' 隔开
  print(keys)
  ret = []
  for dt in datas:
   values = dt.values() ##  ‘str' object has no attribute#
   sql = "insert into %s" % tablename + keys
   sql = sql + " values" + str(tuple(values))
   ret.append(sql)
   # print("1")
  # print keys insert into %tablename dat[i] values str[i]

  self.insert_into_sql(ret)
  print("1")
 def insert_into_sql(self,sqls):
  cursor = self.db.cursor()
  for sql in sqls:
   # 执行sql语句
   try:
    cursor.execute(sql)
    self.db.commit()
    # print("insert %s" % sql, "success.")
   except:
    # Rollback in case there is any error
    self.db.rollback()
 #找列名
 def find_columns(self, tablename):
  sql = "select COLUMN_NAME from information_schema.columns where table_name='%s'" % tablename
  cursor = self.db.cursor()
  try:
   cursor.execute(sql)
   results = cursor.fetchall()
  except:
   raise Exception('hello')
  return tuple(map(lambda x: x[0], results))

 def find(self, tablename, start_time, end_time, fieldName=None):
  """
  :param tablename: test_scale1015
  :param fieldName: None or (columns1010, columns1011, columns1012, columns1013, time)
  :return:
  """
  cursor = self.db.cursor()
  sql = ''
  if fieldName==None:
   fieldName = self.find_columns(tablename)
   sql = "select * from %s where time between %s and %s" % (tablename, str(start_time), str(end_time))
   # print('None')
  else:
   fieldNameStr = ','.join(fieldName)
   sql = "select %s from %s where time between %s and %s" % (
   fieldNameStr, tablename, str(start_time), str(end_time))
   # print('sm')
  try:
   cursor.execute(sql)
   results = cursor.fetchall()
  except:
   raise Exception('hello')
  return fieldName, results,
 
 #样例 data = [{'time':123321,'predict':1.222},{'time':123322,'predict':1.223},{'time':123324,'predict':1.213}]
 def updata(self,datas, tablename):
  cursor = self.db.cursor()
  columns = []
  for data in datas:
   for i in data.keys():
    columns.append(i)
   # print(columns)
   break
   # columns_2=columns[:]
  db.connect()
  if db.is_table_exist(settings.tablename_2, settings.database):
    # exists
    # pass
    for col in columns:
     if col != 'time':
      sql = "alter table %s add column %s double(10,3);" % (settings.tablename_2, col)
      try:
       cursor.execute(sql)
       print("%s is altered ok" % (col))
      except:
       print("alter is failed")
     

    ret = []
    for i in datas:
     col = []
     for ii in i.keys():
      col.append(ii)
     #time = col[0] and predict = col[1]
     time_data = i[col[0]]
     predic_data = i[col[1]]
     sql = "update %s set %s='%s'where %s=%s"%(settings.tablename_2,col[1],predic_data,col[0],time_data)
     ret.append(sql)
    self.insert_into_sql(ret)

    # db.insert_mysql_with_json(tablename, datas)


  else:
    # no exists
    db.create_table(settings.tablename_2, columns)
    db.insert_mysql_with_json(settings.tablename_2, datas)

db = mysql()

其中update()函数,是新添加的接口:

传入的data的样例 data = [{'time':123321,'predict':1.222},{'time':123322,'predict':1.223},{'time':123324,'predict':1.213}] 这样子的。

一个列表里有多个字典,每个字典有time和predict。如果需要存predict_2,predict_3的时候,则实现更新操作,否则,只进行创表和插入数据的操作~~~~~~

看起来是不是很简单~~~~~~

这个接口还没有进行优化等操作,很冗余~~~~

毕竟项目还在测试阶段,等先跑通了,在考虑优化吧~~~~~~

总结

以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对三水点靠木的支持。

Python 相关文章推荐
python支持断点续传的多线程下载示例
Jan 16 Python
进一步探究Python中的正则表达式
Apr 28 Python
python机器学习之随机森林(七)
Mar 26 Python
python中plot实现即时数据动态显示方法
Jun 22 Python
CentOS7下python3.7.0安装教程
Jul 30 Python
Python基础之文件读取的讲解
Feb 16 Python
Python当中的array数组对象实例详解
Jun 12 Python
详解python解压压缩包的五种方法
Jul 05 Python
python rsa实现数据加密和解密、签名加密和验签功能
Sep 18 Python
keras获得某一层或者某层权重的输出实例
Jan 24 Python
Python如何使用bokeh包和geojson数据绘制地图
Mar 21 Python
pandas数据选取:df[] df.loc[] df.iloc[] df.ix[] df.at[] df.iat[]
Apr 24 Python
python中urlparse模块介绍与使用示例
Nov 19 #Python
Python Flask-web表单使用详解
Nov 18 #Python
python+selenium实现京东自动登录及秒杀功能
Nov 18 #Python
深入理解Python单元测试unittest的使用示例
Nov 18 #Python
Python及PyCharm下载与安装教程
Nov 18 #Python
Python实现读取json文件到excel表
Nov 18 #Python
浅谈python 线程池threadpool之实现
Nov 17 #Python
You might like
php无限分类且支持输出树状图的详细介绍
2013/06/19 PHP
php 修改上传文件大小限制实例详解
2016/10/23 PHP
PHP PDOStatement::getAttribute讲解
2019/02/01 PHP
16个最流行的JavaScript框架[推荐]
2011/05/29 Javascript
给超链接添加特效鼠标移动展示提示信息且随鼠标移动
2013/10/17 Javascript
jQuery设置div一直在页面顶部显示的方法
2013/10/24 Javascript
css与javascript跨浏览器兼容性总结
2014/09/15 Javascript
NodeJS中Buffer模块详解
2015/01/07 NodeJs
JavaScript使用pop方法移除数组最后一个元素用法实例
2015/04/06 Javascript
jQuery Mobile中的button按钮组件基础使用教程
2016/05/23 Javascript
jquery 抽奖小程序实现代码
2016/10/12 Javascript
jQuery实现动态添加tr到table的方法
2016/12/26 Javascript
JavaScript常用正则验证函数实例小结【年龄,数字,Email,手机,URL,日期等】
2017/01/23 Javascript
Ajax高级笔记 JavaScript高级程序设计笔记
2017/06/22 Javascript
微信小程序之发送短信倒计时功能
2017/08/30 Javascript
bootstrap+jquery项目引入文件报错的解决方法
2018/01/22 jQuery
使用javascript函数编写简单银行取钱存钱流程
2018/05/26 Javascript
python迭代器实例简析
2014/09/25 Python
使用Python3制作TCP端口扫描器
2017/04/17 Python
python进程管理工具supervisor的安装与使用教程
2017/09/05 Python
Python读写zip压缩文件的方法
2018/08/29 Python
Python Flask框架模板操作实例分析
2019/05/03 Python
PyQt5响应回车事件的方法
2019/06/25 Python
Python实现的ftp服务器功能详解【附源码下载】
2019/06/26 Python
解决导入django_filters不成功问题No module named 'django_filter'
2020/07/15 Python
波兰珠宝品牌:YES
2019/08/09 全球购物
高三自我鉴定怎么写
2013/10/19 职场文书
中专毕业生求职简历的自我评价
2013/10/21 职场文书
党员四风问题个人对照检查材料
2014/10/26 职场文书
计算机实训报告总结
2014/11/05 职场文书
面试感谢信范文
2015/01/22 职场文书
2015年小学总务工作总结
2015/07/21 职场文书
高一地理教学工作总结
2015/08/12 职场文书
2017新年晚会开幕词
2016/03/03 职场文书
用PYTHON去计算88键钢琴的琴键频率和音高
2022/04/10 Python
代码复现python目标检测yolo3详解预测
2022/05/06 Python