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 smallseg分词用法实例分析
May 28 Python
浅谈Python中的闭包
Jul 08 Python
Python爬虫爬取美剧网站的实现代码
Sep 03 Python
python3.4.3下逐行读入txt文本并去重的方法
Apr 29 Python
python基于http下载视频或音频
Jun 20 Python
python判断所输入的任意一个正整数是否为素数的两种方法
Jun 27 Python
Python中的正则表达式与JSON数据交换格式
Jul 03 Python
使用pandas读取文件的实现
Jul 31 Python
Python下应用opencv 实现人脸检测功能
Oct 24 Python
使用OpenCV实现人脸图像卡通化的示例代码
Jan 15 Python
详解python第三方库的安装、PyInstaller库、random库
Mar 03 Python
Python 居然可以在 Excel 中画画你知道吗
Feb 15 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下编码转换函数mb_convert_encoding与iconv的使用说明
2009/12/16 PHP
PHP使用curl制作简易百度搜索
2016/11/03 PHP
PHP实现正则表达式分组捕获操作示例
2018/02/03 PHP
php 广告点击统计代码(php+mysql)
2018/02/21 PHP
js利用Array.splice实现Array的insert/remove
2009/01/13 Javascript
javascript学习笔记(三)显示当时时间的代码
2011/04/08 Javascript
不用锚点也可以平滑滚动到页面的指定位置实现代码
2013/05/08 Javascript
js几秒以后倒计时跳转示例
2013/12/26 Javascript
Javascript优化技巧之短路表达式详细介绍
2015/03/27 Javascript
JS实现可展开折叠层的鼠标拖曳效果
2015/10/09 Javascript
浅析Node.js 中 Stream API 的使用
2015/10/23 Javascript
JS类的定义与使用方法深入探索
2016/11/26 Javascript
Bootstrap 模态框(Modal)插件代码解析
2016/12/21 Javascript
echarts饼图扇区添加点击事件的实例
2017/10/16 Javascript
Vue调试神器vue-devtools安装方法
2017/12/12 Javascript
详解layui中的树形关于取值传值问题
2018/01/16 Javascript
详解vue2.0+vue-video-player实现hls播放全过程
2018/03/02 Javascript
vue实现未登录跳转到登录页面的方法
2018/07/17 Javascript
解决betterScroll在vue中存在图片时,出现拉不动的问题
2018/09/27 Javascript
在layui中对table中的数据进行判断(0、1)转换为提示信息的方法
2019/09/28 Javascript
从零学Python之入门(三)序列
2014/05/25 Python
python得到单词模式的示例
2018/10/15 Python
详解pytorch 0.4.0迁移指南
2019/06/16 Python
Python3.9.1中使用match方法详解
2021/02/08 Python
加拿大折扣、优惠券和交易网站:WagJag
2018/02/07 全球购物
厂长岗位职责
2014/02/19 职场文书
中文教师求职信
2014/02/22 职场文书
2015应届毕业生求职信范文
2015/03/20 职场文书
运动会800米赞词
2015/07/22 职场文书
企业财务管理制度范本
2015/08/04 职场文书
大队委员竞选演讲稿
2015/11/20 职场文书
Python Pandas常用函数方法总结
2021/06/15 Python
一篇文章带你学习Mybatis-Plus(新手入门)
2021/08/02 Java/Android
MySQL配置主从服务器(一主多从)
2021/08/07 MySQL
Html5同时支持多端sdk的小技巧
2021/11/17 HTML / CSS
解决ubuntu安装软件时,status-code=409报错的问题
2022/12/24 Servers