Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/312.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如果我需要一个自动递增的ID,但想检查另一个字段上的重复项,我该如何定义我的模型?_Python_Mysql_Sqlalchemy - Fatal编程技术网

Python 如果我需要一个自动递增的ID,但想检查另一个字段上的重复项,我该如何定义我的模型?

Python 如果我需要一个自动递增的ID,但想检查另一个字段上的重复项,我该如何定义我的模型?,python,mysql,sqlalchemy,Python,Mysql,Sqlalchemy,我有一节这样的课。我的目标是在每次遇到重复链接时更新上次看到的日期 我已经定义了id列,因为它将用作另一个表的外键。这是自动递增的。真正的副本是url class Link(Base): __tablename__ = 'links' id = Column(BigInteger, primary_key=True, unique=True) url = Column(String(500), nullable=False, index=True, unique=True

我有一节这样的课。我的目标是在每次遇到重复链接时更新上次看到的日期

我已经定义了
id
列,因为它将用作另一个表的外键。这是自动递增的。真正的副本是
url

class Link(Base):
    __tablename__ = 'links'
    id = Column(BigInteger, primary_key=True, unique=True)
    url = Column(String(500), nullable=False, index=True, unique=True)
    last_seen_date = Column(DateTime, nullable=False, default=datetime.datetime.now())
我想在重复密钥更新时插入…但我不知道如何定义字段来完成此操作。按照我现在的方式,我永远不能复制,因为组合主键在ID中总是有一个自动递增的部分

我需要如何更改定义以允许重复键更新时的
语句工作当
url
是重复的时,我可以更改
上次查看日期

ALTER TABLE `tablename` ADD UNIQUE INDEX `ttt_url` (`url`);

ttt_xxx将是我出于习惯而使用的密钥的名称。它将允许插入/复制,您可以更新日期/时间戳并保留您的原始pk

如果没有已用
index=True,unique=True定义的pk
?或者这有什么不同吗?我说的是在数据库级别强制执行它,并使用嵌入了重复代码的insert查询。我认为您已经得到了想要的。“允许
ON DUPLICATE KEY UPDATE
语句工作当
url
是重复的时,我可以更改
最后一次看到的日期
”也许我对@LittleQ感到困惑,我认为它不工作,因此提出了这个问题。也许NewGuy在这里报告这是一个成功,并想与我们分享为什么不工作?
在重复键更新last_seen_date=2时插入表(url,last_seen_date)值(1,2)完全正确。通过在url上有一个唯一的索引,如果由mysql程序员而不是sqlalchemy包装器传递,则在重复的url上插入将起作用