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
  • Конструктор Flask-SQLAlchemy
  • В чем разница между Model.query и session.query (Model) в SQLAlchemy?
  • Подзапрос SQLAlchemy из предложения без соединения
  • Flask-SQLAlchemy объединяются в 3 модели и конструкцию таблицы
  • Непрерывные типы Python в вызовах функций
  • Данные вставки sqlalchemy не работают
  • Многопользовательская работа с SQLAlchemy
  • Возможно ли заполнить внешний ключ SQLalchemy в модели и загрузить его связанный объект
  • Установка значения по умолчанию в sqlalchemy
  • Sqlalchemy присоединиться к одному из многих отношений?
  •  
    Interesting Posts for Van-Lav

    Выбор элемента с текстом с помощью Selenium WebDriver

    Hello_World – это слово в Python, оно отличается в другом режиме. Как я его меняю?

    Как сделать статусы elif более элегантно, если добавить к массиву в python

    Есть ли лучший способ перебора двух списков, получая по одному элементу из каждого списка для каждой итерации?

    Здание проблемы cx_Oracle – libclntsh.so.11.1 => не найдено

    Сокеты Python Errno 107: Конечная точка транспорта не подключена

    Django проверить, существует ли связанный объект с ошибкой: RelatedObjectDoesNotExist

    Начальная переменная класса Python.

    Вопрос о развертывании Django newbie – ImportError: не удалось импортировать настройки настроек '

    Почему matplotlib не использует шрифт .ttf, который я предоставляю?

    Перемещение столбца по имени в переднюю часть таблицы в пандах

    Различия между STATICFILES_DIR, STATIC_ROOT и MEDIA_ROOT

    Python __init__ возвращает отказ создать

    Python – способ перезапуска цикла for, аналогичный «продолжить» для циклов while?

    Фильтровать каналы Twitter только по языку

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