PostgreSQL / Python:只有在已经存在的情况下才插入新行

时间:2016-12-15 09:45:33

标签: python postgresql duplicates

我的表:

class api(Base):
    __tablename__ = "api"

    id = Column(Integer, primary_key=True)
    date = Column(DateTime, nullable=False)
    gender = Column(String)
    age = Column(String)
    value = Column(Integer)

Base.metadata.drop_all(engine)
Base.metadata.create_all(engine)

当我发送一个api查询时,日期与之前的查询重叠,会创建重复的行。我怎么能避免这种情况?我可以删除重复项,但有没有更有效的方法来避免首先插入它们?

2 个答案:

答案 0 :(得分:0)

您可以创建一个database constraint,禁止重复输入并处理代码中的错误。

答案 1 :(得分:0)

看起来您正在使用SQLAlchemy ORM。您可以add unique=True to a single column在表格上创建约束。例如:

class API(Base):
    ...
    date = Column(DateTime, nullable=False, unique=True)

您还可以在多个列by passing UniqueConstraint to __table_args__.上创建唯一约束。例如:

class API(Base):
    __table_args__ = (
        UniqueConstraint('date', 'gender'),
    )

在将新记录插入数据库之前,仍建议您检查是否存在,因为通常会在数据库日志文件中记录违反数据库约束的行为。