मुझे तालिका से रिकॉर्ड हटाने में समस्याएं आ रही हैं जिनमें Post
और Tag
कॉलम शामिल है। यह मेरा संबंध तालिका है:SQLAlchemy में कई से कई (माध्यमिक) तालिका से रिकॉर्ड कैसे हटाएं?
tags = db.Table('PostTag',
db.Column('Tag', db.Integer, db.ForeignKey('Tag.Id')),
db.Column('Post', db.Integer, db.ForeignKey('Post.Id'))
)
और
tags = db.relationship(Tag, secondary=tags, backref=db.backref('Post', lazy='dynamic'))
जब मैं ऐसा करते हैं:
from models.Post import Post
posts = Post.query.join(Post.tags).filter(Post.Id == id).all()
if(posts):
return posts
return False
और फिर
for posttag in post[0].tags:
db.session.delete(posttag)
db.session.flush()
पंक्तियाँ से कई-से-अनेक संबंध हटा दिए गए हैं लेकिनसे भी रिकॉर्ड हैंटेबल।
मैं सिर्फ मैं इंटरनेट खोज की, लेकिन मैं कुछ भी निर्णायक नहीं मिला कुछ हालत (उदाहरण के लिए Post=1
)
के लिए PostTag
मेज से रिकॉर्ड नष्ट करने के लिए की जरूरत है। मुझे कई से अधिक रिश्ते पर कैस्केड की जरूरत नहीं है।
297 Query DELETE FROM `PostTag` WHERE `PostTag`.`Tag` = 14 AND `PostTag`.`Post` = 3
297 Query DELETE FROM `PostTag` WHERE `PostTag`.`Tag` = 14 AND `PostTag`.`Post` = 18
297 Query DELETE FROM `Tag` WHERE `Tag`.`Id` = 14
अंतिम पंक्ति 297 Query DELETE FROM
टैग WHERE
टैग .
ईद = 14
वहां नहीं होना चाहिए:
यह एसक्यूएल लॉग है।
अद्यतन/शायद समाधान
मैं एक तरह से साथ इस हल:
sql = 'DELETE FROM PostTag WHERE Post=%s'
db.engine.execute(sql, post,())
लेकिन वह सिर्फ ORM तरीका नहीं है। डालने के लिए ही चला जाता है। मैं इस हल किए गए ओआरएम तरीके को पाने का प्रयास करूंगा। अगर मैं इस समस्या को दूर करता हूं तो मैं जवाब पोस्ट करूंगा।
क्या आप समझा सकते हैं कि यह क्यों काम नहीं करता है? 'टैग = पोस्ट.tags टैग = []' – Konrad
यह इसे प्रतिबद्धता में अपडेट करता है, लेकिन यदि आप डीबी पर क्या होता है तो देखें। यह वास्तव में मेरे मामले में 4000 हटाने में भेज रहा है। हालांकि यह एक भेज सकता है। – Drachenfels