如果值不存在,将值插入 MySQL 表?
Posted
技术标签:
【中文标题】如果值不存在,将值插入 MySQL 表?【英文标题】:Insert values into MySQL table if value does not already exist? 【发布时间】:2020-06-03 15:04:52 【问题描述】:我希望使用 Python 将嵌套列表插入到 mysql 表中。我想为新的 ID 值插入新行,并为那些具有现有 ID 值的列更新某些列。但是,对于这些嵌套列表之一(水果,s [2]),如果这些记录为空,我只想更新 mysql 表中的这些行!我意识到我提出的查询仅适用于新插入的 id 编号,而不适用于更新现有行。这就是我需要帮助的地方!
s = [[1, 20, 21],[1999, 1998, 1990], ['Apple', 'Pear', 'Bannana']
id = s[0]
yearborn = s[1]
favfruit = s[2]
query = '''INSERT INTO table (PersonID, Year, Fruit)
VALUES (%s, %s, %s)'''
cursor.executemany(query, s)
【问题讨论】:
相关:***.com/questions/1361340/… 【参考方案1】:我想为新的 ID 值插入新行,并为那些具有现有 ID 值的列更新某些列。
在 MySQL 中,你可以使用 insert ... on duplicate key
syntax 和一些条件逻辑来仅 update
列 fruit
如果它最初是 null
:
insert into table (personid, year, fruit)
values (%s, %s, %s)
on duplicate key update
year = values(year),
fruit = coalesce(fruit, values(fruit));
为此,您需要对列 personid
设置唯一(或主键)约束。
【讨论】:
我有这个但是由于某种原因“fruit = coalesce....”似乎没有任何效果? 你说的没有任何作用是什么意思? 所以第一行 "values (year) 工作正常。但是 coalesce() 似乎没有改变值。这可能是因为 mysql 表中没有设置空值。肯定是一个空白条目,但看起来像这样 --> ' '?我不确定我是否只是在这里猜测?coalesce 假定为空条目? @Sam:coalesce()
对 null
值进行操作。如果您的值是空字符串,则:fruit = case when fruit = '' then values(fruit) else fruit end
。或者你可以同时处理:fruit = case when fruit = '' or fruit is null then values(fruit) else fruit end
以上是关于如果值不存在,将值插入 MySQL 表?的主要内容,如果未能解决你的问题,请参考以下文章