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

SQLAlchemy:MySQL पर सेल्फ-जॉइन का उपयोग करके डिलीट क्वेरी बनाएं

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") का उपयोग करना है। या कंपाइलर एक्सटेंशन के साथ एक कस्टम निर्माण बनाने के लिए ।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. PHP और MySQL - स्रोत कोड में पासवर्ड से कैसे बचें?

  2. ORDER BY के बिना MySQL तालिका के प्राकृतिक क्रम को उलट दें?

  3. मल्टीथ्रेडेड वातावरण में लेनदेन को संभालना

  4. mysql कमांड लाइन क्वेरी के परिणामों को बैश स्क्रिप्ट वेरिएबल में रखें

  5. एकाधिक कॉलम में एकाधिक आइटम खोजें