SQLAlchemy hiện hỗ trợ UPDATE..FROM trên Postgresql, MySQL và những thứ khác, nhưng chúng tôi vẫn chưa cố gắng hỗ trợ DELETE..JOIN.
Tuy nhiên, nó dường như hoạt động (hầu như?), Miễn là tạo chuỗi 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
bản in:
DELETE FROM path JOIN path AS p1 ON p1.ancestor = :ancestor_1
WHERE path.descendant = p1.descendant
Tuy nhiên, cơ sở dữ liệu MySQL của tôi không chấp nhận điều này, theo mặc định, nó hiển thị INNER JOIN, không thành công, nhưng nếu tôi sửa đổi trình biên dịch MySQL để không thực hiện điều này, vẫn không thành công:
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,)
trông giống như nguyên văn SQL của bạn (ồ, ngoại trừ 'xóa đường dẫn TỪ các đường dẫn'? đúng không?)?
Trong mọi trường hợp, nếu trình biên dịch tích hợp không hoạt động, các tùy chọn của bạn là sử dụng session.execute("some sql")
hoặc để tạo một cấu trúc tùy chỉnh với tiện ích mở rộng trình biên dịch
.