2
class A(Base):
__tablename__ = 'a'
id = Column(Integer, primary_key=True)
name = Column(String(1000))
class B(Base):
__tablename__ = 'b'
id = Column(Integer, primary_key=True)
name = Column(String(1000))
class C(Base):
__tablename__ = 'c'
id = Column(Integer, primary_key=True)
b_id = Column(Integer, ForeignKey('b.id'))
name = Column(String(1000))
a_id = Column(Integer, ForeignKey('a.id'))
b = relationship('B', backref=backref('cb'), foreign_keys = b_id)
a = relationship('A', backref=backref('ca'), foreign_keys = a_id)
connect = engine.connect()
Base.metadata.create_all(bind=engine)
我创建的类创建表,并与SQLAlchemy的将数据添加到MySQL数据库的发挥。我现在面临的问题如下。添加相关数据到MySQL数据库SQLAlchemy的
如果我想添加一个条目到表c我所需要的就是这样的代码。
c_ent = C(name = 'c1')
a1 = A(name = 'a1')
b1 = B(name = 'b1')
a1.ca = [c_ent]
b1.cb = [c_ent]
list1 = [a1, b1]
sess = create_session(name)
for i in list1:
sess.add(i)
sess.commit()
sess.close()
这一切工作我需要它的方式和在c入口B_ID和A_ID外键匹配相应的ID的A和B。
但是,假设在提交数据库并关闭会话后,我现在决定向c'c2'添加另一个条目。我希望这个条目与我的第一个表有相同的关系(以便a_id和b_id与名为'c1'的条目相同)。但是,如果我使用类似于第一个条目的代码,sqlalchemy将在表a和b中创建重复条目,名称为'a1'和'b1',其id编号为2而不是1.然后,我在表c中的条目将有正确的身份证号码,但他们将被链接到重复的条目。
我希望能够向c中添加一个条目,然而我多次选择并将它与表a和b关联,而无需每次都在a和b中创建新条目。我怎样才能避免这种冗余?
此方法仍然有与原始问题相同的问题,但感谢您试图帮助 –
而这个问题在哪里?你的问题是创建新的条目。在我的代码中,我没有创建A和B的新条目,我只使用了你已有的条目。 –
对不起,我可能还不够具体。我并不担心在我的代码中有新的条目,而是由实际数据库中的代码创建的新条目。 –