gpt4 book ai didi

python - 确保没有重复保存 MySql

转载 作者:行者123 更新时间:2023-11-29 05:16:23 25 4
gpt4 key购买 nike

我在 mySql 中有一个看起来像这样的表

+---------------+--------------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+---------------+--------------+------+-----+---------+----------------+
| id | int(11) | NO | PRI | NULL | auto_increment |
| start_of_week | date | NO | | NULL | |
| end_of_week | date | NO | | NULL | |
| weekday | varchar(15) | NO | | NULL | |
+---------------+--------------+------+-----+---------+----------------+

而且我想确保没有重复项保存到其中。我知道我可以在这样的事情之前做一个 select 语句

"select count(*) from Table where start_of_week = %s and end_of_week = %s and weekday = %s", (start_date, end_date, a_weekday)

如果返回 0,则没有项目,完全一样,所以保存它。但我想知道是否有另一种方法,可能是一种更好的方法来确保不保存重复项。顺便说一下,我正在使用 python 保存到数据库,但我想知道是否有一种方法可以在表的设置中完成这个?或者在 python 中执行不同的检查?

感谢您的帮助。

最佳答案

您可以在表中的所有列上创建一个复合键,然后数据库将不允许重复,但不建议这样做,因为您可能会遇到聚簇索引大小和性能低下的问题。

您要做的是创建一个代理键,它可以是每行的 md5 哈希值,然后将其设为主键或具有增量主键的复合键。

您可以使用 hashlib 生成记录的 md5 散列,然后将其存储在表的 md5 列中。然后将其设为主键。如果您尝试插入重复的行,它将具有相同的 md5 值,并且数据库会给您一个错误,因为它是一个重复的键。

请参阅此处了解如何使用 hashlib https://docs.python.org/2/library/hashlib.html#module-hashlib

import hashlib
m = hashlib.md5()
m.update(start_of_week) # these would be the values you are storing in the corresponding rows of the table
m.update(end_of_week)
m.update(weekday)
m.digest()

然后将 m.digest() 存储到 md5 列中。

关于python - 确保没有重复保存 MySql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32217375/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com