我想过滤数据库插入以避免重复,因此每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;
答案 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。