Mysql
 sql >> база данни >  >> RDS >> Mysql

SQLAlchemy:Създаване на заявка за изтриване с помощта на самостоятелно присъединяване в MySQL

SQLAlchemy в момента поддържа UPDATE..FROM в 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. Актуализирайте два различни реда в един ред на SQL

  2. Възможно ли е PHP MYSQL заявката да игнорира празната променлива в клаузата WHERE?

  3. Увеличете колоните в laravel

  4. Как да попълня рационална MySQL база данни с много таблици от съществуваща база данни с една таблица?

  5. MySQL вмъкнете там, където не съществува / ако не съществува