Временные поля в джанго

У меня есть база данных MySQL, сейчас я генерирую все поля datetime как models.DateTimeField . Есть ли способ получить timestamp ? Я хочу, чтобы иметь возможность autoupdate при создании и обновлении и т. Д.

В документации по django этого нет?

3 Solutions collect form web for “Временные поля в джанго”

На самом деле была очень хорошая и содержательная статья. Здесь: http://ianrolfe.livejournal.com/36017.html

Решение на странице немного устарело, поэтому я сделал следующее:

 from django.db import models from datetime import datetime from time import strftime class UnixTimestampField(models.DateTimeField): """UnixTimestampField: creates a DateTimeField that is represented on the database as a TIMESTAMP field rather than the usual DATETIME field. """ def __init__(self, null=False, blank=False, **kwargs): super(UnixTimestampField, self).__init__(**kwargs) # default for TIMESTAMP is NOT NULL unlike most fields, so we have to # cheat a little: self.blank, self.isnull = blank, null self.null = True # To prevent the framework from shoving in "not null". def db_type(self, connection): typ=['TIMESTAMP'] # See above! if self.isnull: typ += ['NULL'] if self.auto_created: typ += ['default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP'] return ' '.join(typ) def to_python(self, value): if isinstance(value, int): return datetime.fromtimestamp(value) else: return models.DateTimeField.to_python(self, value) def get_db_prep_value(self, value, connection, prepared=False): if value==None: return None # Use '%Y%m%d%H%M%S' for MySQL < 4.1 return strftime('%Y-%m-%d %H:%M:%S',value.timetuple()) 

Чтобы использовать его, все, что вам нужно сделать, это: timestamp = UnixTimestampField(auto_created=True)

В MySQL столбец должен выглядеть как: 'timestamp' timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,

Единственным недостатком этого является то, что он работает только с базами данных MySQL. Но вы можете легко изменить его для других.

Пакет pip django-unixdatetimefield предоставляет поле UnixDateTimeField, которое вы можете использовать для этого из коробки ( https://pypi.python.org/pypi/django-unixdatetimefield/ ).

Пример модели:

 from django_unixdatetimefield import UnixDateTimeField class MyModel(models.Model): created_at = UnixDateTimeField() 

Запрос ORM Python:

 >>> m = MyModel() >>> m.created_at = datetime.datetime(2015, 2, 21, 19, 38, 32, 209148) >>> m.save() 

База данных:

 sqlite> select created_at from mymodel; 1426967129 

Вот интересующий исходный код – https://github.com/Niklas9/django-unixdatetimefield .

Отказ от ответственности: я являюсь автором этого пакета pip.

Для автоматического обновления при вставке и обновлении используйте это:

 created = DateTimeField(auto_now_add=True, editable=False, null=False, blank=False) last_modified = DateTimeField(auto_now=True, editable=False, null=False, blank=False) 

DateTimeField должен хранить UTC (проверьте настройки вашего БД, я знаю из Postgres, что это так). Вы можете использовать l10n в шаблонах и формате через:

 {{ object.created|date:'SHORT_DATETIME_FORMAT' }} 

Секунды с эпохи Unix:

 {{ object.created|date:'U' }} 

См. https://docs.djangoproject.com/en/1.10/ref/templates/builtins/#date.

  • flake8 жалуется на логическое сравнение "==" в предложении фильтра
  • mysql-python устанавливает фатальную ошибку
  • Создайте только одну таблицу с Flask + SqlAlchemy
  • Преобразование массива байтов Java в массив байтов Python
  • mysql в кодировке python
  • Python MySQL параметризовал конфликты запросов с символом% wildcard в инструкции LIKE
  • Использование инструкции Python для инструкции SQL INSERT
  • Класс не имеет указанной таблицы или имени табуляции и не наследует от существующего класса с табличным отображением
  • Python - лучший язык программирования в мире.