Как передать текущую дату в необработанном sql при выполнении sqlalchemy

Я хочу обновить столбец даты и времени в базе данных mysql. Приложение использует sqlalchemy, но по какой-то причине я должен передать здесь необработанный sql. Запрос

from sqlalchemy import func
session.execute(text("update table set col1=:value, date=:curr_date"),{'value:' my_value, 'curr_date:' func.now()})

Запрос выдает ошибку expected string or buffer рядом с 'curr_date:' func.now()}) . Как отформатировать возвращаемое значение в строку? Даже если я отформатирую его в строку, как он будет преобразован в дату и время при вставке в базу данных?


person user3527975    schedule 10.05.2016    source источник


Ответы (1)


Я бы посоветовал немного почитать TextClause.bindparams от SQLAlchemy. Я думаю, это может быть то, что вы ищете. Для текущей даты и времени я бы рекомендовал просто использовать datetime.datetime.now(). Пожалуйста, смотрите ниже:

from sqlalchemy import text
import datetime

stmt = text("UPDATE test_table SET name=:value, update_date=:curr_date WHERE id=:the_id")
stmt = stmt.bindparams(the_id=1, value='John', curr_date=datetime.datetime.now())
session.execute(stmt)  # where session has already been defined

Используя следующую среду, я попробовал приведенный выше код с сеансом, и он работал нормально:

OS X El Capitan
MySQL Server 5.7
PyMySQL (0.7.2)
SQLAlchemy (1.0.12)
Python 3.5.1

Я надеюсь, что это помогло!

person John Adjei    schedule 10.05.2016
comment
Спасибо за предложение. Я знаю о datetime.datetime.now(). Я ищу что-то с помощью func.now(). - person user3527975; 17.05.2016