SqlAlchemy mysql миллисекунда или микросекундная точность

Я отваживался на одиссею, пытаясь получить дробное временное разрешение, работающее должным образом в моей базе данных. Я использую метод python datetime.now() для создания объектов даты. Затем я сохраняю эти объекты в поле, которое отображается в COLUMN(DATETIME(9)) который из библиотеки SqlAlchemy. Первоначально я получал сообщение об усечении моих данных. Это связано с тем, что я использовал mysql 5.5. С тех пор я обновлен до 5.6.19 и больше не получаю усеченную информацию.

Тем не менее, база данных по-прежнему фактически не содержит дробных записей времени. Например, вот значение, с которого создается объект datetime.now ():

 2015-04-17 16:31:12.804444 

Выше было то, чего я ожидал бы. Объект в памяти имеет разрешение в микросекундах. Теперь, после сохранения этого в базе данных mysql, я вижу следующее значение, если я открою клиент командной строки mysql и верну строку с помощью оператора select:

 2015-04-17 16:31:13 

Очевидно, что значение округляется до ближайшей секунды. Это плохо, и я понятия не имею, что вызывает это!

В случае, если это имеет значение, я использую mysql-connector-python == 2.0.3

UPDATE: Я также попытался использовать COLUMN(DATETIME(6)) , но получил то же поведение.

Я ниже, включая модель, в случае, если информация имеет значение:

 class User(Base): __tablename__ = 'Users' uid = Column(INT, primary_key=True, autoincrement=True) dateCreated = Column(DATETIME(6)) def __init__(self, *args, **kwargs): super(user, self).__init__(*args, **kwargs) self.dateCreated = datetime.now() 

ОБНОВЛЕНИЕ: предложение Педро не было проблемой, хотя это определенно помогло мне добиться прогресса, поэтому большое спасибо. Я пробовал переходить через код в sql-коннекторе, пока не добрался до инструкции вставки mysql. В заявлении действительно содержится дробное значение времени. Однако при выполнении значение округляется. Когда я сделал описание на столе, я заметил, что тип datetime – это только то, что datetime когда это действительно должно быть datetime(6) .

Я сам создаю базу данных, используя модель SA, которая явно объявляет Column(DATETIME(6)) и Base.metadata.create_all(self.db, checkfirst=True) , поэтому я не понимаю, почему (6) не заканчивается в фактической структуре таблицы. Думаю, я скоро это выясню, и когда я это сделаю, я опубликую обновление.

UPDATE: конструктор DATETIME не принимает спецификацию длины поля. Он принимает только аргумент для часовых поясов. Мне не ясно, как указать длину поля datetime, так как для таких типов, как varchar, вы просто передадите его конструктору. Погружение продолжается.

3 Solutions collect form web for “SqlAlchemy mysql миллисекунда или микросекундная точность”

Проблема, с которой я столкнулась, заключается в том, что класс SqlAlchemy DATETIME не работает с требованием mysql о передаче значения (6) в конструктор для представления дробных значений времени. Вместо этого нужно использовать класс sqlalchemy.dialects.mysql.DATETIME . Этот класс позволяет использовать параметр fsp (параметр дробных секунд). Таким образом, объявление столбца должно выглядеть так:

 dateCreated = Column(DATETIME(fsp=6)) 

Спасибо тем, кто ответил. Это помогло моему исследованию в конечном итоге споткнуться об этом эзотерическом и очень запутанном различии.

Кажется, это открытая проблема с MySQLdb, а не MySQL или SQLAlchemy.

http://sourceforge.net/p/mysql-python/feature-requests/24/

Вы можете попробовать использовать другую библиотеку драйверов MySQL – проверьте документацию SQLAlchemy для поддерживаемых параметров – или вы можете попробовать обезьянную пачку, предложенную в открытой проблеме.

Согласно документации MySQL , она поддерживает только до 6 мест (микросекунд):

«MySQL 5.6.4 и up расширяет дробную секундную поддержку значений TIME, DATETIME и TIMESTAMP с точностью до микросекунд (6 цифр)

Я не знаю точно, но указание 9 цифр может вернуть колонну меньшей точности по умолчанию.

  • sqlalchemy IS NOT NULL select
  • Поле Integer не автоинкремент в SQLAlchemy
  • Каков рекомендуемый шаблон использования scoped_session в многопоточном sqlalchemy webapp?
  • SQLAlchemy: распечатать фактический запрос
  • нужна проверка и добавление базы данных sqlite для ведения домашнего хозяйства и управления кодом
  • Кросс-база данных объединяется в sqlalchemy
  • В SQLAlchemy, как я могу определить событие для запуска DDL с использованием декларативного синтаксиса?
  • SQLAlchemy INSERT IGNORE
  •  
    Interesting Posts for Van-Lav

    Итерация по списку из ведущего и конечного с многопроцессорной обработкой

    Pythonic способ найти максимальное значение и его индекс в списке?

    Есть ли в Python быстрый XML-парсер, который позволяет мне начинать тег как смещение байтов в потоке?

    Python: если не val, vs, если val is None

    Странное поведение: понимание Lambda внутри списка

    График рассеяния и цветовое сопоставление в Python

    Раздел Python и разделение

    В Python, почему функция может изменять некоторые аргументы, воспринимаемые вызывающим, но не другие?

    SWIG-упаковка C ++ для Python: перевод списка строк в вектор STL строк STL

    Инициализация массива с маскировкой numpy из списка Python int с None values

    Networkx read_gml error "networkx.exception.NetworkXError: не может tokenize u'graph 'в (3, 1)"

    python lxml – изменять атрибуты

    Django: создать входной массив HTML с использованием формы django

    База данных или табличное решение для временных массивов Numpy

    Сумма строки Django в шаблоне для цикла

    Python - лучший язык программирования в мире.