SQLAlchemy ondersteunt momenteel UPDATE..FROM via Postgresql, MySQL en anderen, maar we hebben tot nu toe nog niet geprobeerd DELETE..JOIN te ondersteunen.
Het lijkt echter (bijna?) te werken voor zover het de SQL-string genereert:
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
afdrukken:
DELETE FROM path JOIN path AS p1 ON p1.ancestor = :ancestor_1
WHERE path.descendant = p1.descendant
Mijn MySQL-database accepteert dit echter niet, standaard wordt INNER JOIN weergegeven, wat mislukt, maar als ik de MySQL-compiler aanpas om dit niet te doen, mislukt het nog steeds:
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,)
lijkt letterlijk op uw SQL (oh, behalve 'paden verwijderen FROM paden'? klopt dat?) ?
In ieder geval, als de ingebouwde compiler het niet doet, zijn uw opties om session.execute("some sql")
te gebruiken. of om een aangepaste constructie te bouwen met de compilerextensie
.