Как преобразовать pandas datetime64 во что-то, что может быть распознано как DateField в Django?

Когда я загружаю Excel с помощью pandas, столбец, содержащий даты, был правильно определен как datetime64

excel_table = pd.read_excel(path, sheet_name=ws_name, header=2) 
print(excel_table['Start Date'])

# output:
0       2001-01-31
1       2001-03-02
2       2001-07-23
3       2001-07-25
4       2002-03-11
...
Name: Start Date, Length: 11056, dtype: datetime64[ns]

Затем я написал excel_table в базу данных sqlite3:

excel_table.to_sql(table_name, cols_to_use, index=False)

Когда я проверяю столбцы, используя PRAGMA table_info(TABLENAME), я получаю следующее:

...
11|Start Date|NUM|0||0
...

Разве это не должно быть TIMESTAMP, а не NUM?

Затем я создал класс модели, используя метод Django inspectdb, который дал мне следующее:

# This is an auto-generated Django model module.
# You'll have to do the following manually to clean this up:
#   * Rearrange models' order
#   * Make sure each model has one field with primary_key=True
#   * Make sure each ForeignKey and OneToOneField has `on_delete` set to the desired behavior
#   * Remove `managed = False` lines if you wish to allow Django to create, modify, and delete the table
# Feel free to rename the models, but don't rename db_table values or field names.
from django.db import models


class TableName(models.Model):

    start_date = models.TextField(db_column='Start Date', blank=True, null=True)  # Field name made lowercase. Field renamed to remove unsuitable characters. This field type is a guess.


    class Meta:
        managed = False
        db_table = 'TableName'

Теперь это TextField, а не DateField, что проблематично, поскольку я пытаюсь реализовать функции фильтрации и сортировки для этого столбца (например, фильтрация дат после 2020-12-31 и т.д.).

Где я допустил ошибки, и как мне это исправить?

В файле models.py объявите поле start_date как DateField (или DateTimeField)

datetime64 dtype датафрейма будет автоматически преобразован в исправленный тип в MySQL или SQLite.

В файле serializers.py добавьте следующую строку:

from rest_framework import serializers

start_date = serializers.DateTimeField(format="%Y-%m-%d")

Старый ответ:

Возможно, вы можете попробовать преобразовать datetime64 в python datetime и экспортировать в базу данных:

df['Start Date'] = df['Start Date'].dt.to_pydatetime()
Вернуться на верх