如何使用条件增加列的值?
how do i increment a value of column with condition?
我的 table 看起来像这样
id effect1(int) effect2(int) effect3(int)
1 0 1 5
2 1 0 0
我有一个函数,return 1to3 int 值表示 effect1、effect2、effect3 和“id”
当我的函数 returning“id”与我数据集中的“id”匹配时,我试图将每个效果的值增加 1,否则会创建新行并增加效果值
例如
如果我的函数returns (1,3)
我的 table 会变成
id effect1(int) effect2(int) effect3(int)
1 0 1 6
2 1 0 0
如果我的函数 returns (3,3)
我的 table 会变成
id effect1(int) effect2(int) effect3(int)
1 0 1 6
2 1 0 0
3 0 0 1
我已经使用 python 尝试了以下代码,但失败了。
有人可以帮我吗
i = (1,3) # the returning value from my function
if i[1] == 1:
sql = "update test set effect1=effect1+1 WHERE id= ({})".format((str(i[0])))
db.execute_query(myDb, sql)
elif i[1] == 2:
sql = "update test set effect2=effect2+1 WHERE id= ({})".format((str(i[0])))
val = (i[0],)
db.execute_query(myDb, sql )
elif i[1] == 3:
sql = "update test set effect3=effect3+1 WHERE id= ({})".format((str(i[0])))
val = (i[0],)
db.execute_query(myDb, sql )
def execute_query(connection, query):
cursor = connection.cursor()
try:
cursor.execute(query)
connection.commit()
print("Query successful")
except Exception as err:
print(f"Error: '{err}'")
在您的实施中,您没有检查 id
是否已经存在。
我用 SQL 语句更新了您的代码,该语句执行您提到的 insertion/update-
- 如果
id
存在那么只需要增加特定的效果
- 如果
id
不存在,那么 id
的新行需要 added/inserted 到 test
table)
我还将变量i
(两个元素的列表)替换为名为id
和effect_no
的两个变量,以提高代码的可读性。 if
else
语句也不需要,因为 effect_no
可以 used/incorporated 到 sql 语句本身。
更新后的代码如下:
id, effect_no = (1,3) # the returning value from your function
sql = f"""INSERT INTO test (id, effect1, effect2, effect3)
VALUES ({id}, 0, 0, 0)
ON DUPLICATE KEY UPDATE effect{effect_no} = effect{effect_no} + 1"""
db.execute_query(myDb, sql)
def execute_query(connection, query):
cursor = connection.cursor()
try:
cursor.execute(query)
connection.commit()
print("Query successful")
except Exception as err:
print(f"Error: '{err}'")
此外,我在此处找到了 INSERT ... ON DUPLICATE KEY UPDATE
SQL 语句 https://chartio.com/resources/tutorials/how-to-insert-if-row-does-not-exist-upsert-in-mysql/#using-insert--on-duplicate-key-update
假设id
是table的主键或者定义为唯一的,你可以像这样使用MySql的INSERT ... ON DUPLICATE KEY UPDATE Statement:
i = (1, 3)
sql = """
INSERT INTO test (id, effect1, effect2, effect3)
SELECT id, (n = 1), (n = 2), (n = 3) FROM (SELECT ? id, ? n) t
ON DUPLICATE KEY UPDATE effect1 = effect1 + (n = 1),
effect2 = effect2 + (n = 2),
effect3 = effect3 + (n = 3);
"""
db.execute_query(myDb, sql, i)
def execute_query(connection, query, i):
cursor = connection.cursor()
try:
cursor.execute(query, i)
connection.commit()
print("Query successful")
except Exception as err:
print(f"Error: '{err}'")
在 MySql 中查看 demo 其工作原理。
我的 table 看起来像这样
id effect1(int) effect2(int) effect3(int)
1 0 1 5
2 1 0 0
我有一个函数,return 1to3 int 值表示 effect1、effect2、effect3 和“id”
当我的函数 returning“id”与我数据集中的“id”匹配时,我试图将每个效果的值增加 1,否则会创建新行并增加效果值
例如
如果我的函数returns (1,3) 我的 table 会变成
id effect1(int) effect2(int) effect3(int)
1 0 1 6
2 1 0 0
如果我的函数 returns (3,3) 我的 table 会变成
id effect1(int) effect2(int) effect3(int)
1 0 1 6
2 1 0 0
3 0 0 1
我已经使用 python 尝试了以下代码,但失败了。 有人可以帮我吗
i = (1,3) # the returning value from my function
if i[1] == 1:
sql = "update test set effect1=effect1+1 WHERE id= ({})".format((str(i[0])))
db.execute_query(myDb, sql)
elif i[1] == 2:
sql = "update test set effect2=effect2+1 WHERE id= ({})".format((str(i[0])))
val = (i[0],)
db.execute_query(myDb, sql )
elif i[1] == 3:
sql = "update test set effect3=effect3+1 WHERE id= ({})".format((str(i[0])))
val = (i[0],)
db.execute_query(myDb, sql )
def execute_query(connection, query):
cursor = connection.cursor()
try:
cursor.execute(query)
connection.commit()
print("Query successful")
except Exception as err:
print(f"Error: '{err}'")
在您的实施中,您没有检查 id
是否已经存在。
我用 SQL 语句更新了您的代码,该语句执行您提到的 insertion/update-
- 如果
id
存在那么只需要增加特定的效果 - 如果
id
不存在,那么id
的新行需要 added/inserted 到test
table)
我还将变量i
(两个元素的列表)替换为名为id
和effect_no
的两个变量,以提高代码的可读性。 if
else
语句也不需要,因为 effect_no
可以 used/incorporated 到 sql 语句本身。
更新后的代码如下:
id, effect_no = (1,3) # the returning value from your function
sql = f"""INSERT INTO test (id, effect1, effect2, effect3)
VALUES ({id}, 0, 0, 0)
ON DUPLICATE KEY UPDATE effect{effect_no} = effect{effect_no} + 1"""
db.execute_query(myDb, sql)
def execute_query(connection, query):
cursor = connection.cursor()
try:
cursor.execute(query)
connection.commit()
print("Query successful")
except Exception as err:
print(f"Error: '{err}'")
此外,我在此处找到了 INSERT ... ON DUPLICATE KEY UPDATE
SQL 语句 https://chartio.com/resources/tutorials/how-to-insert-if-row-does-not-exist-upsert-in-mysql/#using-insert--on-duplicate-key-update
假设id
是table的主键或者定义为唯一的,你可以像这样使用MySql的INSERT ... ON DUPLICATE KEY UPDATE Statement:
i = (1, 3)
sql = """
INSERT INTO test (id, effect1, effect2, effect3)
SELECT id, (n = 1), (n = 2), (n = 3) FROM (SELECT ? id, ? n) t
ON DUPLICATE KEY UPDATE effect1 = effect1 + (n = 1),
effect2 = effect2 + (n = 2),
effect3 = effect3 + (n = 3);
"""
db.execute_query(myDb, sql, i)
def execute_query(connection, query, i):
cursor = connection.cursor()
try:
cursor.execute(query, i)
connection.commit()
print("Query successful")
except Exception as err:
print(f"Error: '{err}'")
在 MySql 中查看 demo 其工作原理。