sql >> Databáze >  >> RDS >> Mysql

Aktualizujte spojenou tabulku prostřednictvím SQLAlchemy ORM pomocí session.query

Od verze 0.7.4 sqlalchemy.sql.expression.update umožňuje odkazovat na více tabulek v klauzuli WHERE. S tímto můžete vytvořit a spustit výraz jako:

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

(příklad přímo z odkazu výše)

Problém, který má ValAyal, je ve skutečnosti proto, že Query.join() není podporován s Query.update() . Bohužel až do 0.9.1 to tiše generovalo dotazy podobné těm, které ValAyal sdílel výše. poznámky k protokolu změn pro 0.9.1 poznamenává, že chování bylo upraveno tak, aby vydávalo varování:

Ve skutečnosti jsme na to narazili, když jsem dnes večer pracoval, a zjistili jsme, že náš kód ve skutečnosti vydává následující varování (které říká, že jde o chybu v 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()

V našem případě jsme se rozhodli převést aktualizaci na výběr a aktualizaci na jednu tabulku.



  1. Chyba při převodu datových typů při importu z Excelu do SQL Server 2008

  2. Nejste to vy, to jsem já (odstraňování problémů s I/O)

  3. PHP PDO Připravený příkaz vázat hodnotu NULL

  4. Kopírování databáze MySQL na jiný počítač