Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Zaktualizuj połączoną tabelę za pomocą SQLAlchemy ORM przy użyciu session.query

Od wersji 0.7.4 sqlalchemy.sql.expression.update umożliwia odwoływanie się do wielu tabel w klauzuli WHERE. Dzięki temu możesz zbudować i wykonać wyrażenie takie jak:

users.update().values(name='ed').where(
        users.c.name==select([addresses.c.email_address]).\
                    where(addresses.c.user_id==users.c.id).\
                    as_scalar()
        )

(przykład prosto z powyższego linku)

Problem ValAyal polega na tym, że Query.join() nie jest obsługiwany przez Query.update() . Niestety, do wersji 0.9.1 generowało to po cichu zapytania, takie jak to, które ValAyal udostępnił powyżej. notatki dziennika zmian dla wersji 0.9.1 zauważa, że ​​zachowanie zostało zmodyfikowane w celu wyświetlenia ostrzeżenia:

Właściwie natknęliśmy się na to, gdzie pracuję dziś wieczorem i okazało się, że nasz kod w rzeczywistości emituje następujące ostrzeżenie (które mówi, że będzie to błąd w wersji 1.0):

SAWarning: Can't call Query.update() or Query.delete() when join(), outerjoin(), select_from(), or from_self() has been called.  This will be an exception in 1.0
  self._validate_query_state()

W naszym przypadku zdecydowaliśmy się przekonwertować aktualizację na wybór i aktualizację na jedną tabelę.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Błąd MySQL 1118 (za duży rozmiar wiersza) podczas przywracania bazy danych Django-mailer

  2. Rozwiązywanie problemów z replikacją MySQL:część pierwsza

  3. C# MySql UTWÓRZ UŻYTKOWNIKA

  4. przestań wstawiać dane do bazy podczas odświeżania strony

  5. 5 najlepszych narzędzi do monitorowania MySQL