Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

SQLAlchemy:Tạo truy vấn xóa bằng cách sử dụng tự tham gia trên MySQL

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 .



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Làm cách nào để đọc tệp văn bản này và Chèn vào MySQL?

  2. Làm cách nào để bạn kết nối với cơ sở dữ liệu MySQL bằng Oracle SQL Developer?

  3. SQL:Chọn các khóa không tồn tại trong một bảng

  4. Tự động chọn một cột trong MySQL

  5. Các thủ tục được lưu trữ trong MySQL không hoạt động với SELECT (câu hỏi cơ bản)