SQLAlchemy वर्तमान में UPDATE का समर्थन करता है..Postgresql, MySQL और अन्य से, लेकिन हमने अभी तक DELETE..JOIN का समर्थन करने का प्रयास नहीं किया है।
हालाँकि, यह SQL स्ट्रिंग उत्पन्न करने तक (लगभग?) काम करता प्रतीत होता है:
class Path(Base):
__tablename__ = "path"
id = Column(Integer, primary_key=True)
descendant = Column(Integer)
ancestor = Column(Integer)
j = join(Path, p1, p1.ancestor == 5)
d = delete(j).where(Path.descendant == p1.descendant)
print d
प्रिंट:
DELETE FROM path JOIN path AS p1 ON p1.ancestor = :ancestor_1
WHERE path.descendant = p1.descendant
हालांकि, मेरा MySQL डेटाबेस इसे स्वीकार नहीं कर रहा है, डिफ़ॉल्ट रूप से यह INNER JOIN प्रस्तुत करता है, जो विफल हो जाता है, लेकिन अगर मैं ऐसा नहीं करने के लिए MySQL कंपाइलर को संशोधित करता हूं, तब भी विफल रहता है:
s.execute(d)
(ProgrammingError) (1064, "You have an error in your SQL syntax; check the manual that
corresponds to your MySQL server version for the
right syntax to use near 'JOIN path AS p1 ON p1.ancestor = 5 WHERE
path.descendant = p1.descendant' at line 1") 'DELETE FROM path JOIN
path AS p1 ON p1.ancestor = %s WHERE path.descendant = p1.descendant'
(5,)
आपके SQL शब्दशः की तरह दिखता है (ओह, 'पथों से पथ हटाएं' को छोड़कर? क्या यह सही है?)?
किसी भी स्थिति में, यदि बिल्ट इन कंपाइलर ऐसा नहीं कर रहा है, तो आपके विकल्प session.execute("some sql")
का उपयोग करना है। या कंपाइलर एक्सटेंशन
के साथ एक कस्टम निर्माण बनाने के लिए ।