मैं sqlalchemy के साथ कई से अधिक रिश्तों से निपट रहा हूं। मेरा सवाल यह है कि कई से अधिक संबंधपरक तालिका में डुप्लिकेट जोड़ी मान जोड़ने से बचें।एसक्यूएलकेमी - पायथन में कई से अधिक रिलेशनशिप टेबल में डुप्लीकेट जोड़ने से कैसे बचें?
चीजों को स्पष्ट करने के लिए, मैं आधिकारिक SQLAlchemy दस्तावेज़ से उदाहरण का उपयोग करूंगा।
Base = declarative_base()
Parents2children = Table('parents2children', Base.metadata,
Column('parents_id', Integer, ForeignKey('parents.id')),
Column('children_id', Integer, ForeignKey('children.id'))
)
class Parent(Base):
__tablename__ = 'parents'
id = Column(Integer, primary_key=True)
parent_name = Column(String(45))
child_rel = relationship("Child", secondary=Parents2children, backref= "parents_backref")
def __init__(self, parent_name=""):
self.parent_name=parent_name
def __repr__(self):
return "<parents(id:'%i', parent_name:'%s')>" % (self.id, self.parent_name)
class Child(Base):
__tablename__ = 'children'
id = Column(Integer, primary_key=True)
child_name = Column(String(45))
def __init__(self, child_name=""):
self.child_name= child_name
def __repr__(self):
return "<experiments(id:'%i', child_name:'%s')>" % (self.id, self.child_name)
###########################################
def setUp():
global Session
engine=create_engine('mysql://root:[email protected]/db_name?charset=utf8', pool_recycle=3600,echo=False)
Session=sessionmaker(bind=engine)
def add_data():
session=Session()
name_father1=Parent(parent_name="Richard")
name_mother1=Parent(parent_name="Kate")
name_daughter1=Child(child_name="Helen")
name_son1=Child(child_name="John")
session.add(name_father1)
session.add(name_mother1)
name_father1.child_rel.append(name_son1)
name_daughter1.parents_backref.append(name_father1)
name_son1.parents_backref.append(name_father1)
session.commit()
session.close()
setUp()
add_data()
session.close()
इस कोड के साथ
, डेटा तालिकाओं में डाला है निम्नलिखित:
माता तालिका:
+----+-------------+
| id | parent_name |
+----+-------------+
| 1 | Richard |
| 2 | Kate |
+----+-------------+
बच्चे मेज:
+----+------------+
| id | child_name |
+----+------------+
| 1 | Helen |
| 2 | John |
+----+------------+
Parents2children तालिका
+------------+-------------+
| parents_id | children_id |
+------------+-------------+
| 1 | 1 |
| 1 | 2 |
| 1 | 1 |
+------------+-------------+
जैसा कि आप देख सकते हैं, वहाँ पिछले तालिका में डुप्लिकेट है ... कैसे मैं इन डुप्लिकेट जोड़ने से SQLAlchemy रोका जा सकता है?
मैं संबंध डाल करने की कोशिश की है ("बाल", माध्यमिक = ..., collection_class = सेट) लेकिन इस त्रुटि प्रदर्शित होता है:
AttributeError: 'InstrumentedSet' object has no attribute 'append'
आप की जाँच नहीं कर सके कि एक रिश्ता पहले से मौजूद है, इसे फिर से जोड़ने से पहले? – user1451340