侯体宗的博客
  • 首页
  • 人生(杂谈)
  • 技术
  • 关于我
  • 更多分类
    • 文件下载
    • 文字修仙
    • 中国象棋ai
    • 群聊
    • 九宫格抽奖
    • 拼图
    • 消消乐
    • 相册

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

Python  /  管理员 发布于 7年前   198

前言

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

#coding=utf-8import MySQLdbconn= 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 pymysqlimport settingsclass 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 cx_Oracle的基础使用方法(连接和增删改查)
    下一条:
    python中urlparse模块介绍与使用示例
  • 昵称:

    邮箱:

    0条评论 (评论内容有缓存机制,请悉知!)
    最新最热
    • 分类目录
    • 人生(杂谈)
    • 技术
    • linux
    • Java
    • php
    • 框架(架构)
    • 前端
    • ThinkPHP
    • 数据库
    • 微信(小程序)
    • Laravel
    • Redis
    • Docker
    • Go
    • swoole
    • Windows
    • Python
    • 苹果(mac/ios)
    • 相关文章
    • 在python语言中Flask框架的学习及简单功能示例(0个评论)
    • 在Python语言中实现GUI全屏倒计时代码示例(0个评论)
    • Python + zipfile库实现zip文件解压自动化脚本示例(0个评论)
    • python爬虫BeautifulSoup快速抓取网站图片(1个评论)
    • vscode 配置 python3开发环境的方法(0个评论)
    • 近期文章
    • 在windows10中升级go版本至1.24后LiteIDE的Ctrl+左击无法跳转问题解决方案(0个评论)
    • 智能合约Solidity学习CryptoZombie第四课:僵尸作战系统(0个评论)
    • 智能合约Solidity学习CryptoZombie第三课:组建僵尸军队(高级Solidity理论)(0个评论)
    • 智能合约Solidity学习CryptoZombie第二课:让你的僵尸猎食(0个评论)
    • 智能合约Solidity学习CryptoZombie第一课:生成一只你的僵尸(0个评论)
    • 在go中实现一个常用的先进先出的缓存淘汰算法示例代码(0个评论)
    • 在go+gin中使用"github.com/skip2/go-qrcode"实现url转二维码功能(0个评论)
    • 在go语言中使用api.geonames.org接口实现根据国际邮政编码获取地址信息功能(1个评论)
    • 在go语言中使用github.com/signintech/gopdf实现生成pdf分页文件功能(95个评论)
    • gmail发邮件报错:534 5.7.9 Application-specific password required...解决方案(0个评论)
    • 近期评论
    • 122 在

      学历:一种延缓就业设计,生活需求下的权衡之选中评论 工作几年后,报名考研了,到现在还没认真学习备考,迷茫中。作为一名北漂互联网打工人..
    • 123 在

      Clash for Windows作者删库跑路了,github已404中评论 按理说只要你在国内,所有的流量进出都在监控范围内,不管你怎么隐藏也没用,想搞你分..
    • 原梓番博客 在

      在Laravel框架中使用模型Model分表最简单的方法中评论 好久好久都没看友情链接申请了,今天刚看,已经添加。..
    • 博主 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 @1111老铁这个不行了,可以看看近期评论的其他文章..
    • 1111 在

      佛跳墙vpn软件不会用?上不了网?佛跳墙vpn常见问题以及解决办法中评论 网站不能打开,博主百忙中能否发个APP下载链接,佛跳墙或极光..
    • 2016-10
    • 2016-11
    • 2018-04
    • 2020-03
    • 2020-04
    • 2020-05
    • 2020-06
    • 2022-01
    • 2023-07
    • 2023-10
    Top

    Copyright·© 2019 侯体宗版权所有· 粤ICP备20027696号 PHP交流群

    侯体宗的博客