2017-01-16 2 views
2

sqlalchemy.exc.IntegrityError: (pyodbc.IntegrityError) ('23000', '[23000] [FreeTDS][SQL Server]Cannot insert an explicit value into a timestamp column. Use INSERT with a column list to exclude the timestamp column, or insert a D EFAULT into the timestamp column. (273) (SQLExecDirectW)') [SQL: 'INSERT INTO task_events (task_id, event_name, ts) OUTP UT inserted.id VALUES (?, ?, ?)'] [parameters: (54, 'RUNNING', datetime.datetime(2017, 1, 16, 18, 5, 55, 595066))]SQLAlchemy не удается вставить метку времени в MSSQL

ошибка, кажется, связано с этим:

You can't insert explicit values into a timestamp column. Timestamp values are unique binary numbers that are automatically generated.

Не SQLAlchemy знает об этом? Есть ли какой-то ключ \, позволяющий SQLAlchemy знать, что теперь вставлять временные метки?

This, похоже, является кодом luigi, который обрабатывает SQLAlchemy.

пс. Здесь проблема заключается в том, что luigi использует SQLAlchemy, и я не хочу изменять код luigi, но если вы можете предложить простое решение на стороне luigi, это тоже сработает.

+0

Привета, может вы можете опубликовать фрагмент кода, который вызывает это. В общем случае SqlAlchemy может выполнять мелкозернистые вставки только на некоторых столбцах, но решение здесь будет зависеть от того, как ваш код luigi взаимодействует с sqlalchemy или изменяет схему базы данных, чтобы разрешить вставку в столбец 'ts' –

+0

Попробуйте использовать [ 'FetchedValue'] (http://docs.sqlalchemy.org/en/latest/core/defaults.html#triggered-columns). Без полного и проверяемого примера трудно сказать больше. Что предоставляет значение datetime для вставки? –

+0

Тип данных «timestamp» Microsoft SQL Server на самом деле не является временной меткой - это скорее последовательность (это древний захват и ужасно неправильное название). Если вам нужно обновить значение даты, используйте тип данных 'datetime'. Если используется только дата, используйте тип данных «date» (в зависимости от вашей версии MSSQL.) В поисках кода вы, вероятно, захотите использовать тип данных '' datetime2' '(https://msdn.microsoft.com/en -us/library/bb677335.aspx), например 'DECLARE @ dt2 datetime2 (7)' –

ответ

0

Таким образом, благодаря этому барину там @LaugingVergil и @HaleemurAli я просто решил добавить еще sed взломать мой dockerfile ...

Я просто RUN sed -i 's/TIMESTAMP/DateTime/g' /usr/lib/python3.4/site-packages/luigi/db_task_history.py перед тем CMD /usr/bin/luigid

Смежные вопросы