SQLAlchemy understøtter i øjeblikket UPDATE..FROM på tværs af Postgresql, MySQL og andre, men vi har endnu ikke forsøgt at understøtte DELETE..JOIN.
Det ser dog ud til at virke (næsten?), hvad angår generering af SQL-strengen:
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
udskrifter:
DELETE FROM path JOIN path AS p1 ON p1.ancestor = :ancestor_1
WHERE path.descendant = p1.descendant
Men min MySQL-database accepterer ikke dette, som standard gengiver den INNER JOIN, som mislykkes, men hvis jeg ændrer MySQL-kompileren til ikke at gøre dette, mislykkes det stadig :
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,)
ligner din SQL ordret (åh, bortset fra 'slet stier FRA stier'? er det rigtigt?) ?
Under alle omstændigheder, hvis den indbyggede compiler ikke gør det, er dine muligheder at bruge session.execute("some sql")
eller for at bygge en brugerdefineret konstruktion med compilerudvidelsen
.