当前位置: 首页 > 知识库问答 >
问题:

SQLAlchemy IntegrityError重复键违反唯一约束

龙宣
2023-03-14
    (IntegrityError) ERROR:  duplicate key violates UNIQUE-CONSTRAINT e_data_pkey
    DETAIL:  KEY (id)=(2) already exists.
    'INSERT INTO e_data (id, iso3, year, value) VALUES (%(id)s, %(iso3)s, %(year)s, %(value)s)' 
  ({'iso3': 'ABW', 'id': 1, 'value': 5.5, 'year': 2009}, 
   {'iso3': 'ZZZ', **'id': 2,** 'value': 9.9, 'year': 1977}, 
   {'iso3': 'ZZY', **'id': 2**, 'value': 9.876, 'year': 1971})
from sqlalchemy import *
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import relation, sessionmaker

Base = declarative_base()

class E_data(Base):
    __tablename__ = 'e_data'

    id = Column(Integer, ForeignKey('e_indicator.id'), primary_key=True) 
    iso3 = Column(String(3), nullable=False)
    year = Column(Integer)
    value = Column(FLOAT)

    eind = relation("E_indicator", backref='e_data', lazy=False)

    def __init__(self, iso3=None, year=None, value=None):
        self.iso3 = iso3
        self.year = year
        self.value = value
    def __repr__(self):
        return "E_Data (%r, %r, %r, %r)" % (self.iso3, self.year, self.value, self.eind)

class E_indicator(Base):
    __tablename__ = 'e_indicator'

    id = Column(Integer, primary_key=True)
    name = Column(String(50), nullable=False, unique=True)

    def __init__(self, name=None):
        self.name = name

    def __repr__(self):
        return "E_indicator (%r)" % (self.name)

engine = create_engine('postgresql://postgres:password@localhost/world')
Base.metadata.create_all(engine)

Session = sessionmaker(bind=engine)
session = Session()

#INSERT INTO DB
Session = sessionmaker(bind=engine)
session = Session()

m1 = E_data("ABW", 2009, 5.5)
m1.eind = E_indicator("GDP_TEST")

d2 = E_indicator("GDP THE OTHER WAY ROUND")
d2.e_data = [E_data("ZZZ", 1977, 9.9), E_data("ZZY", 1971, 9.876)]


#try:
session.add(m1)
session.add(d2)
session.commit()
#except:
    #session.rollback()

谢谢你的建议。

共有1个答案

丘华翰
2023-03-14

很抱歉,你们的建议都没有解决我的问题。我唯一可以这样指定primaryjoin条件的方法是:

eind = relation("E_indicator", backref='e_data', primaryjoin="E_indicator.id==E_data.id")

这就解决了问题。我希望这能帮助到某个人。

干杯

 类似资料:
  • 我在创建应用程序时遇到了这个问题。因此,每当我添加第一条评论时,问题都不会出现,但当我第二次尝试时,我会收到此错误: 重复的键值违反了唯一约束“tripplanner_discussion_author_id_key”详细信息:键 (author_id)=(1) 已存在。 我试图把放到 models.py,但它根本没有帮助。 models.py views.py 更新 当我登录到另一个用户时,一个

  • 当并发客户机试图将数据插入子表时,我们面临唯一的约束冲突问题。 假设我们有1以下的表格。用户user_id、first_name、last_name。2.项目project_idproject_name和project_description。 两者都有着多对多的关系。 当两个客户端试图创建一个新用户时。假设client1创建了user1(id=aa1),子记录项目(id=1)。Client2还创

  • 这是我的stacktrace: 学生表: 学生实体:学生标识默认为自动递增 postgres控制台(这些学生由sql脚本创建): 在此处输入图像描述 我也尝试过这样生成,但这没有帮助 我用postgreql它似乎我有问题与id Generator,谢谢你的想法和答案

  • 我在django应用程序中创建了一个模型,并从pgadmin将数据填充到表中,但现在当我试图从应用程序创建记录时,它抛出了这个完整性错误: 重复的键值违反了唯一约束“packsapp_foo_pkey” 详细信息:键(id)=(4)已经存在。 这是models.py 我是否总是必须从应用程序本身插入数据? Views.py

  • 我必须交换同一表的不同行的属性。 有一列“reference_id”在 DB 中具有唯一的约束。 代码: A 级- B级- 异常跟踪:

  • 问题内容: 我正在跟着我先前提出的一个问题,在这个问题中,我试图寻求从愚蠢/编写不佳的mysql查询到postgresql的转换。我相信我成功了。无论如何,我正在使用从mysql数据库手动移动到postgres数据库的数据。我正在使用如下查询: 我有理由相信这很好。但是,这导致了新问题。尝试提交时,我从django收到一条错误,指出: 我已经看过这里发布的一些回复,但是我还没有找到解决我的问题的方