On Jun 4, 2008, at 11:51 AM, Jeff Putsch wrote:
>
> Howdy,
>
> I'm trying to execute the following:
>
> nis_accounts_table.update(
> and_(nis_accounts_table.c.domain_id == 20,
> nis_users_table.c.id == nis_accounts_table.c.nis_user_id,
> nis_users_table.c.expires < datetime.today()
> )).execute(active=False)
>
> with PostgreSQL > 8.1 and sqlalchemy 0.4.6
>
> Unforutnately the SQL getting generated is:
>
> 'UPDATE nis_accounts SET active=%(active)s WHERE
> nis_accounts.domain_id = %(domain_id_1)s AND nis_users.id =
> nis_accounts.nis_user_id AND nis_users.expires < %
> (expires_1)s' {'active': False, 'expires_1': datetime.datetime(2008,
> 6, 4, 8, 43, 8, 91895), 'domain_id_1': 20}
>
> and PostgreSQL complains about a missing FROM clause for table
> nis_users.
>
> The SQL should be:
>
> 'UPDATE nis_accounts SET active=%(active)s FROM nis_users WHERE
> nis_accounts.domain_id = %(domain_id_1)s AND nis_users.id =
> nis_accounts.nis_user_id AND nis_users.expires < %
> (expires_1)s' {'active': False, 'expires_1': datetime.datetime(2008,
> 6, 4, 8, 43, 8, 91895), 'domain_id_1': 20}
>
> It is not clear to me how to get this clause added using SQLA.
>
> Do I need to use a raw SQL statement here?
SQLA's update() construct does not support "FROM" (its not standard
SQL). Use a subquery instead to match rows, or alternatively raw SQL
for the PG-specific version.
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"sqlalchemy" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/sqlalchemy?hl=en
-~----------~----~----~----~------~----~------~--~---