python中单个和批量增加更新的mysql(没有则插入,有则更新)

建表语句:

DROP TABLE IF EXISTS `stock_discover`;
CREATE TABLE `stock_discover` (
  `code` char(6) NOT NULL,
  `index` int(11) unsigned NOT NULL DEFAULT ‘0‘,
  `name` varchar(20) NOT NULL,
  `exchange` varchar(10) NOT NULL DEFAULT ‘‘,
  `date` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
  `yesterday` double unsigned NOT NULL,
  PRIMARY KEY (`code`,`index`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 ROW_FORMAT=DYNAMIC;

单个添加更新

如果记录在表中不存在则进行插入,如果存在则进行更新:

sql = "INSERT INTO stock_discover VALUES (‘%s‘, 2, ‘%s‘, ‘HZ‘, ‘%s‘, ‘%s‘)"        " ON DUPLICATE KEY UPDATE `date` = ‘%s‘ , yesterday = ‘%s‘‘"
#数据格式
data = [‘000005‘, u‘合肥‘, ‘2018-09-19 14:55:21‘, u‘2520.64‘]
sql = sql % (data[0], data[1], data[2], data[3], data[2], data[3])

cursor.execute(sql)

批量添加更新
在更新大量数据时可能同时遇到两个问题:
① 如果每条更新执行一次sql性能很低,也容易造成阻塞;
② 批量更新时又有可能遇到主键重复的问题
使用 ON DUPLICATE KEY UPDATE 一条sql解决批量更新和主键重复问题(id为主键),使用executemany进行批量插入

# 记录在表中不存在则进行插入,如果存在则进行更新
sql = "INSERT INTO `stock_discover` VALUES (%s, %s, %s, %s, %s, %s) "           "ON DUPLICATE KEY UPDATE `date` = VALUES(`date`) , yesterday = VALUES(yesterday)"

#数据格式如下:
data_info = [(‘000005‘, 2, u‘合肥‘, ‘HZ‘, ‘2018-09-19 14:55:21‘, u‘2520.64‘),
             (‘000006‘, 2, u‘北京‘, ‘HZ‘, ‘2018-09-19 14:55:21‘, u‘2694.92‘),
             (‘000007‘, 2, u‘上海‘, ‘HZ‘, ‘2018-09-19 14:55:21‘, u‘2745.38‘)]

#批量插入使用executement
cursor.executemany(sql, data_info)

注意: ON DUPLICATE KEY UPDATE是mysql特有的语法,对于其他sql并不一定适用

也可以使用如下方法:

Mysql插入数据的SQL语句主要有:

1、insert into表示插入数据,数据库会检查主键,如果出现重复会报错;

2、replace into表示插入替换数据,需求表中有PrimaryKey,或者unique索引,如果数据库已经存在数据,则用新数据替换,如果没有数据效果则和insert into一样;

3、insert ignore表示,如果表中如果已经存在相同的记录,则忽略当前新数据;

create table testtb(
id int not null primary key,
name varchar(50),
age int
);
insert into testtb(id,name,age)values(1,‘bb‘,13);
select * from testtb;
insert ignore into testtb(id,name,age)values(1,‘aa‘,13);
select * from testtb;
replace into testtb(id,name,age)values(1,"aa",12);
select * from testtb;

原文地址:https://www.cnblogs.com/skgoo/p/10821110.html

时间: 2024-11-02 16:59:44

python中单个和批量增加更新的mysql(没有则插入,有则更新)的相关文章

关于使用MySQL语法ON DUPLICATE KEY UPDATE单个增加更新及批量增加更新的sql

应用场景: 在实际应用中,经常碰到导入数据的功能,当导入的数据不存在时则进行添加,有修改时则进行更新, 在刚碰到的时候,第一反应是将其实现分为两块,分别是判断增加,判断更新,后来发现在mysql中有ON DUPLICATE KEY UPDATE一步就可以完成,感觉实在是太方便了, 该语句是基于唯一索引或主键使用,比如一个字段a被加上了unique index,并且表中已经存在了一条记录值为1. 比如: 下面两个语句会有相同的效果: INSERT INTO table (a,b,c) VALUES

python中使用excutemany执行update语句,批量更新

python中使用excutemany执行update语句,批量更新 # coding:utf8 import pymysql import logging connection = pymysql.connect(host=HOST, port=3306, user=USER, password=PASSWORD, db=DATABASE,charset='utf8mb4',cursorclass=pymysql.cursors.DictCursor) cursor = connection.

python中的MySQL数据库操作 连接 插入 查询 更新 操作

MySQL数据库 就数据库而言,连接之后就要对其操作.但是,目前那个名字叫做qiwsirtest的数据仅仅是空架子,没有什么可操作的,要操作它,就必须在里面建立“表”,什么是数据库的表呢?下面摘抄自维基百科对数据库表的简要解释,要想详细了解,需要看官在找一些有关数据库的教程和书籍来看看. 在关系数据库中,数据库表是一系列二维数组的集合,用来代表和储存数据对象之间的关系.它由纵向的列和横向的行组成,例如一个有关作者信息的名为 authors 的表中,每个列包含的是所有作者的某个特定类型的信息,比如

fabric --- Python中的批量远程管理和部署工具

Fabric是Python中一个非常强大的批量远程管理和部署工具,常用于在多个远程PC上批量执行SSH任务. 常见的使用方法大概总结如下: 1, 首先,要将批量执行的任务写入到一个fabfile.py中, # -*- coding:utf-8 -*- from fabric.api import run, local, roles, env, cd env.hosts=[ '192.168.1.110', '192.168.1.111', '192.168.1.112' ] env.user="

Python中常用的一些操作总结(持续更新)

写在前面的话 其实也没有什么可以写的,或者说完全没有价值.因为你只要动一动手指就可以在Google上找到我要写的这些东西.只是我还不习惯好久没有碰我的blog,但是我又不想写没有价值的东西.或许有价值,只是在我一年两不编程的情况下,我会忘记那些我以前很熟悉的操作是怎么完成的,或许混到那个地步我的人生就开始悲剧了吧.总之,成长成我想要的样子我还是需要很长的路要走. 这一篇是会持续更新的,至少为了保证它看起来不那么水,也要让它持续更新 python中的进制转换 1.其他进制转换为10进制 所有的进制

在cxf中使用配置避免增加字段导致客户端必须更新的问题

在cxf中使用配置避免增加字段导致客户端必须更新的问题 http://www.iflym.com/index.php/code/201307310001.html 在cxf中使用配置避免增加字段导致客户端必须更新的问题 2013/07/31 11:00:19 1 Comment Tags: cxf, webservice   Posted :java开发, 开源框架, 编程开发 在使用cxf实现webservice时,经常碰到的问题就是如果在服务端,修改了一个接口的签名实现,如增加一个字段,或者

涛哥的Python脚本工具箱之批量替换目录所有指定扩展名的文件中的指定字符串

今天发布刚完成的涛哥的Python脚本工具箱之批量替换目录所有指定扩展名的文件中的指定字符串,命令行参数处理改用目前比较好用的argparse库,Python代码如下: #!/usr/bin/python2.7 # -*- encoding: UTF-8 -*- # Copyright 2014 [email protected] """replace old string with new string from all files in path 批量替换目录所有指定扩展

Python中怕遗忘的知识点总结(持续更新)

只有在形参表末尾的那些参数可以有默认参数值,即你不能在声明函数形参的时候,先声明有 默认值的形参而后声明没有默认值的形参. 这是因为赋给形参的值是根据位置而赋值的.例如,def func(a, b=5)是有效的,但是def func(a=5, b)是 无效 的. 注意,没有返回值的return语句等价于return None.None是Python中表示没有任何东西的特殊 类型.例如,如果一个变量的值为None,可以表示它没有值. pass语句在Python中表示一个空的语句块. def som

python中常见的那些错误及解决方法(不定更新)

错误1:SyntaxError: 'return' outside function解决:将return放在方法体中return不能在方法以外使用 错误2:TypeError: must be str, not int类型错误 必须是一个字符串 不能是数字解决办法:使用+拼接的时候 必须使用字符串,或者将数字转化成字符串 错误3:SyntaxError: invalid syntax语法错误 非法的语法解决办法:看报错信息在第几行 ,从这一行往上找错误 错误4:IndentationError: