sql >> Databasteknik >  >> RDS >> Mysql

Uppdatera sammanfogad tabell via SQLAlchemy ORM med session.query

Från och med version 0.7.4 sqlalchemy.sql.expression.update tillåter dig att referera till flera tabeller i WHERE-satsen. Med detta kan du bygga och exekvera ett uttryck som:

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

(exempel direkt från länken ovan)

Problemet som ValAyal har beror faktiskt på att Query.join() stöds inte med Query.update() . Tyvärr, fram till 0.9.1 genererade detta tyst frågor som den ValAyal delade ovan. ändringslogganteckningarna för 0.9.1 noterar att beteendet modifierades för att avge en varning:

Vi stötte faktiskt på det här där jag jobbar just i kväll och upptäckte att vår kod faktiskt avger följande varning (som säger att det kommer ett fel i 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()

I vårt fall valde vi att konvertera uppdateringen till ett urval och en uppdatering till en tabell.



  1. Oracle SqlPlus - sparar utdata i en fil men visas inte på skärmen

  2. Hur man importerar data från textfil till mysql-databas

  3. Hur man delar upp en kommaseparerad sträng i Oracle

  4. Felsökning av CPU-prestanda på VMware