PostgreSQL
 sql >> डेटाबेस >  >> RDS >> PostgreSQL

कई-से-अनेक SQL-कीमिया और Postgresql से हटाना

मुझे लगता है कि त्रुटि संदेश सही है:वास्तव में आपके डेटाबेस में आपके पास 2 पंक्तियाँ हैं जो Location को लिंक करती हैं और Heading उदाहरण। इस मामले में आपको यह पता लगाना चाहिए कि यह पहली बार में कहां और क्यों हुआ, और इसे दोबारा होने से रोकें

  1. सबसे पहले, इस धारणा की पुष्टि करने के लिए, आप अपने डेटाबेस के विरुद्ध निम्न क्वेरी चला सकते हैं:

    q = session.query(
        headings_locations.c.location_id,
        headings_locations.c.heading_id,
        sa.func.count().label("# connections"),
    ).group_by(
        headings_locations.c.location_id,
        headings_locations.c.heading_id,
    ).having(
        sa.func.count() > 1
    )
    
  2. मान लें कि धारणा की पुष्टि हो गई है, ठीक करें इसे अपने डेटाबेस में सभी डुप्लिकेट को मैन्युअल रूप से हटाकर (प्रत्येक के लिए केवल एक छोड़कर)।

  3. उसके बाद, एक UniqueConstraint जोड़ें। आपके headings_locations . पर टेबल:

    headings_locations = db.Table('headings_locations',
            db.Column('id', db.Integer, primary_key=True),
            db.Column('location_id', db.Integer(), db.ForeignKey('location.id')),
            db.Column('headings_id', db.Integer(), db.ForeignKey('headings.id')),
            db.UniqueConstraint('location_id', 'headings_id', name='UC_location_id_headings_id'),
    )
    

ध्यान दें कि आपको इसे डेटाबेस में जोड़ने की आवश्यकता है, इसे sqlalchemy में जोड़ने के लिए पर्याप्त नहीं है मॉडल।

अब कोड जहां गलती से डुप्लीकेट डाला गया है वह अद्वितीय बाधा उल्लंघन अपवाद के साथ विफल हो जाएगा, और आप समस्या की जड़ को ठीक कर सकते हैं।




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. RedHat Linux पर एकाधिक PostgreSQL सर्वर कैसे स्थापित करें

  2. शर्त के आधार पर पंक्तियाँ प्राप्त करें

  3. पोस्टग्रेज में Seq स्कैन और बिटमैप हीप स्कैन में क्या अंतर है?

  4. विंडोज़ पर साइकोपग इंस्टालेशन

  5. ~~ ऑपरेटर पोस्टग्रेज में