pymysql 执行条件插入

最近使用python 语言使用pymysql 工具向数据库添加记录

首先。连接数据库

import pymysql

conn=pymysql.connect(host = 'localhost' # 连接名称,默认127.0.0.1
,user = 'user' # 用户名
,passwd='***' # 密码
,port= 3306 # 端口,默认为3306
,db='test' # 数据库名称
,charset='utf8' # 字符编码
)
cur = conn.cursor() # 生成游标对象

#查看表的结构

sql2="desc id_similarity;"
cur.execute(sql2) # 执行SQL语句
data = cur.fetchall() # 通过fetchall方法获得数据
print(type(data))
print(data)

输出如下:


(('id', 'int(11)', 'NO', 'PRI', None, 'auto_increment'), ('id1', 'int(11)', 'NO', '', None, ''), ('id2', 'int(11)', 'NO', '', None, ''), ('time', 'datetime', 'NO', '', 'CURRENT_TIMESTAMP', ''))

有4列,id、id1、id2、time

#声明变量

id1=600

id2=632

#确认id1=600的具体记录和数量

cur.execute(sql3) # 执行SQL语句
data_temp = cur.fetchall() # 通过fetchall方法获得数据
print(type(data_temp))
print(data_temp)

输出:


((1, 600, 632, datetime.datetime(2022, 6, 6, 16, 40, 7)), (2641, 600, 601, datetime.datetime(2022, 6, 6, 16, 49, 59)))

共有2条记录,现在的需求是,如果数据库中存在相应的id1和id2,则不再插入到数据库中,否则插入数据库中。在参考资料3中,使用第一种方法,即虚表的方法进行

#条件添加,存在则添加记录,否则不添加
try:
    sql1="insert into id_similarity(id1,id2)  select %s,%s from dual where not exists(select id1,id2 from id_similarity where id1=%s and id2=%s);"
    cur.execute(sql1,(str(id1),str(id2),str(id1),str(id2))) # 执行SQL语句
    conn.commit()
    data_temp = cur.fetchall() # 通过fetchall方法获得数据
    print(type(data_temp))
    print(data_temp)
except Exception as e:
    print('insert into eror:{0}'.format(e))#打印错误
    conn.rollback() #回滚

上述sql1 语句中,dual 是虚表,从mysql 5.1后存在,只有一行一列,它的存在就是为了在函数间传递变量用的,而4个‘%s’是代表执行sql语句时的参数。还有其它方法可以实现,见参考资料3.

执行后,再次确认id1=600的记录,依旧是2条,说明重复则没有插入。

cur.close() # 关闭游标
conn.close() # 关闭连接

参考资料:

1sql insert根据条件插入_ZyhMemory的博客-CSDN博客_insert 带条件

 

2sql 如果不存在则插入,存在则不操作或修改_四月天五月雨的博客-CSDN博客_sql 如果不存在则创建记录 

3MySQL INSERT插入条件判断:如果不存在则插入_指尖飘落的程序的博客-CSDN博客_insert 判断是否存在

你可能感兴趣的:(mysql,python,sql,数据库,database)