【发布时间】:2018-04-12 08:57:57
【问题描述】:
考虑使用以下属性测试表名
+-------+------------+---------------------------+----------+
| id | test_case | file_name | coverage |
+-------+------------+---------------------------+----------+
| 8645 | test case1 | /vendor/src/kmod/vendor.c | 32 |
| 12456 | test case4 | /vendor/src/kmod/vendor.c | 28 |
| 20258 | test case3 | /vendor/src/kmod/vendor.c | 30 |
+-------+------------+---------------------------+----------+
在此表中,当每个新插入到表中时,它必须检查新的覆盖率值是否大于现有的最小覆盖率值,如果这是真的,我需要用现有的最小覆盖率值更新新条目,以便我可以仅保留表中覆盖率最高的前 3 个值。
考虑到一个新条目带有coverage= 29,因为它大于min(coverage)=28,那么我需要用29和测试用例名称更新覆盖率值。
我正在使用 python-mysql,请让我知道 python mysql 查询/代码在上面执行此操作。
我正在使用 python 从列表中向表中插入值
for x,y in zip(out2,out4):
cur.execute("insert into testing(test_case,file_name,coverage) values('test case8',%s,%s) on duplicate file_name like "%s" update coverage=case when values(coverage) then values(coverage) else coverage end",(x,y,x))
db.commit()
所以每当新值出现时,它必须检查 min(coverage) 值。如果新值大于现有 min(coverage),它必须更新,否则它需要忽略该循环
【问题讨论】:
-
您要求提供代码补全服务。阅读您的问题,我知道您知道该怎么做:“如果这是真的,它必须检查新的覆盖率值是否大于现有的最小覆盖率值”,并且此要求不在您的代码中。只需编写它,如果您发现从数据库中读取值的一些问题,请点击此处Minimal, Complete, and Verifiable example
-
如果表中没有任何条目(或 1 或 2)会怎样?
-
我会考虑一个mysql过程而不是一个插入语句。
-
@P.Salmon 如果我们没有条目,那么它必须作为新行插入
-
@danihp 代码是:query("update testing set coverage="%s" ,test_case="%s" where file_name like"%s" and coverage=(select min(coverage) from testing其中 file_name like "%s")"),(x,y,z,z)
标签: python mysql database python-2.7 mysql-python