2017-02-14 42 views
1

假設我們有一個整數陣列列xs一個Postgres表:在xs列中的所有行的如何使用SQLAlchemy ORM替換Postgres數組元素?

create table mytable (
    id bigserial primary key, 
    xs int[] 
); 

使用的Postgres 9.4和SQLAlchemy的1.0.14,我想更換單個值(例如123) 。我現在已經是一個原始的SQL查詢,看起來像

update mytable set xs = array_replace(xs, 123, 456) where 123 = any(xs) 

123 = any(xs)只是加快查詢否則,我們將取代不顧有趣的值是否在數組中或不中的所有行。

當我已經映射了MyTable時,如何使用SQLAlchemy ORM重寫上述查詢?

回答

2

假設你使用了正確的postgresql.ARRAY類型:

synchronization必要
from sqlalchemy import func 

session.query(MyTable).\ 
    filter(MyTable.xs.any(123)).\ 
    update({MyTable.xs: func.array_replace(MyTable.xs, 123, 456)}, 
      synchronize_session=False) 

變化。

+0

很好的答案!謝謝! – Timo