你如何避免重复进入数据库?

时间:2018-06-08 08:22:04

标签: python mysql

我想过滤数据库插入以避免重复,因此每1 ProductId只插入1个产品。我该怎么做呢? 这是我的插入内容:

add_data = ("INSERT INTO productdetails"
            "(productId, productUrl, discount, evaluateScore, volume, packageType, lotNum, validTime, storeName, storeUrl, allImageUrls, description) "
            "VALUES (%s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s, %s)")

这是它看起来的样子,但是在PyMySQL中,我如何在mysql.connector中做同样的事情?

INSERT INTO producttable (productId, productTitle, salePrice, originalPrice )
        SELECT * FROM (SELECT %(productId)s, %(productTitle)s, %(salePrice)s, %(originalPrice)s) AS tmp
        WHERE NOT EXISTS (
            SELECT productId FROM producttable WHERE productId = %(productId)s
        )
        LIMIT 1;

3 个答案:

答案 0 :(得分:2)

执行此操作的正确方法是在数据库端。您需要添加一个唯一约束:

ALTER TABLE productdetails
ADD UNIQUE (productId);

你可以简单地做插入,不用任何地方或者如果。

为什么呢? 如果你按照yayati的建议保留一套,你就可以通过设置和处理它作为瓶颈来限制自己。

如果添加约束,则将数据库添加到数据库中以快速检查唯一性,即使数百万行也是如此。如果DB不是唯一的,那么你会看到DB是否返回错误。

答案 1 :(得分:0)

您可以做的是通过String Interpolation创建Insert语句并继续将它们添加到Set中。 Set集合本身只保留唯一的字符串。然后,您可以将一组唯一的SQL插入语句批量加载到RDBMS中。

答案 2 :(得分:0)

将列设置为唯一。然后使用INSERT IGNORE语句,如果有重复的条目,查询将不会执行。你可以阅读更多关于INSERT IGNORE的here