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

50pmv0ei  于 2021-06-23  发布在  Mysql
关注(0)|答案(3)|浏览(295)

我想过滤数据库插入,以避免重复,所以它只插入一个产品每1 ProductId . 我该怎么做?这是我的插页:

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;
6l7fqoea

6l7fqoea1#

将列设置为唯一。然后使用insert ignore语句,如果存在重复条目,查询将不会执行。您可以在这里阅读有关插入忽略的更多信息。

oug3syen

oug3syen2#

正确的方法是在数据库端。需要添加唯一约束:

ALTER TABLE productdetails
ADD UNIQUE (productId);

你可以比简单地做插入,没有任何地方或如果。
为什么?如果您按照yayati的建议保留一个集合,那么您将通过将集合及其周围的处理作为瓶颈来限制自己。
如果添加了约束,那么即使有数百万行,也会让数据库快速检查唯一性。如果db不是唯一的,则会返回错误。

mfpqipee

mfpqipee3#

您可以通过中的字符串插值创建insert语句,并将它们添加到一个集合中。集合集合本身只保留唯一的字符串。然后,可以将一组唯一的sql insert语句批量加载到rdbms中。

相关问题