我在Python3中编写了一个生成大量数据的程序,我想使用python脚本将这些数据存储在MySQL中,该脚本调用包含查询的存储过程来执行操作。
我有一个非常大的数据库,+ / - 3.5毫米。条目,在这个数据库中有一些重复,我使用此查询进行整理:
SELECT oligoSequence FROM Oligos GROUP BY oligoSequence HAVING COUNT(oligoSequence) > 1;
现在我收到了以下存储过程:
DELIMITER //
CREATE PROCEDURE sp_mark_duplicate_oligos()
BEGIN
SELECT oligoSequence FROM Oligos GROUP BY oligoSequence HAVING count(oligoSequence) > 1;
END //
DELIMITER ;
至于我的表格,我得到了一个tinyint(isUniqueProbe),如果它是重复的话我想从0更改为1。
CREATE TABLE Oligos
( gene_id varchar(30) not null,
oligoStartposition int not null,
oligoSequence varchar(25) not null,
incubationTemp decimal(5,2) not null,
isUniqueProbe tinyint(1),
primary key(gene_id, oligoStartposition),
foreign key(gene_id) references Genes(id)
)ENGINE=INNODB;
但是我对MySQL很陌生,我似乎无法在存储过程中使用更新语句,也许我已经使用了太长时间但是如果有人可以对此有所了解我将会是非常感激。
提前致谢, 埃里克
答案 0 :(得分:0)
Python似乎与此问题无关,也与存储过程中的事实无关。
UPDATE Oligos o
JOIN (SELECT oligoSequence
FROM Oligos
GROUP BY oligoSequence
HAVING COUNT(*) > 1) dups
ON o.oligoSequence = dups.oligoSequence
SET isUniqueProbe = 1
您应该将oligoSequence
编入索引,以提高效率。