sqlalchemy обновить часть даты - PullRequest
0 голосов
/ 08 мая 2018

У меня есть таблица с Date, и мне нужно установить только day и month часть даты на 1 и сохранить исходный год для набора идентификаторов.

Итак, я пытался сформировать выражение вроде (и его варианты):

session.query(
    UserData
).filter(
    UserData.id.in_(selected_ids)
).update(
    {
        'user_date': cast((func.date_part('year', UserData.user_date), 1, 1), Date),
    },
    synchronize_session='fetch',
)

Я просто не могу понять это правильно. Помощь

1 Ответ

0 голосов
/ 14 мая 2018

ОК, после некоторой борьбы я придумал:

session.query(
    UserData
).filter(
    UserData.id.in_(selected_ids)
).update(
    {
        'user_date': cast(func.concat(extract('year', UserData.user_date, type_=Date), '-01-01'), Date),
    },
    synchronize_session='fetch',
)

extract не удавалось, пока я не привел тип данных, затем я создал новую строку даты и привел ее обратно к Date.

Был еще один случай, когда поле также было Date, но возвращенный тип данных был строковым (формат 2000-05-21), поэтому это решение не сработало. Поэтому я решил это как обычный string, взяв первые 4 цифры года с func.substr(UserData.user_date, 1, 4):

session.query(
    UserData
).filter(
    UserData.id.in_(selected_ids)
).update(
    {
         'user_date': func.concat(func.substr(UserData.user_date, 1, 4), '-01-01')),
    },
    synchronize_session='fetch',
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...