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

Я рисковал одиссеей, пытаясь добиться правильного разрешения дробного времени в моей базе данных. Я использую метод pythondatetime.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

ОБНОВЛЕНИЕ: я также попытался использовать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) не заканчивается в реальной структуре таблицы. Я думаю, что я пойму это в ближайшее время, хотя, и я опубликую обновление, когда я это сделаю.

ОБНОВЛЕНИЕ: конструктор DATETIME не принимает спецификацию длины поля. Требуется только аргумент для часовых поясов. Мне не ясно, как указать длину поля datetime, поскольку для таких типов, как varchar, можно просто передать его конструктору. Погружение продолжается.

Ответы на вопрос(1)

Ваш ответ на вопрос