Obtener el mes de un campo datetime.datetime en sqlalchemy
Me gustaría obtener el día de un campo datetime.datetime en sqlalchemy definido en el modelo. Estoy enviando el valor desde el front-end para insertar los datos en la base de datos. Sin embargo, hay un campo adicional que solo necesita el mes de ese campo datetime.datetime.
¿Cómo puedo obtener solo el día del valor recibido?
Imaginemos que obtengo esto desde el front-end:
'occurrence_timestamp': datetime.datetime(2022, 1, 5, 0, 0),
'occurrence_description': 'Descripción de la ocurrencia'
Luego, en el modelo hay un campo adicional:
'occurrence_month': db.Column(db.Integer)
'occurrence_timestamp' = db.Column(db.DateTime)
'occurrence_description' = db.Column(db.String)
Entonces, necesito algo como esto:
'occurrence_month' = db.Column(db.Integer, default=getMonth())
donde getMonth()
se define como:
def getMonth(occurrence_timestamp):
return sqlalchemy.func.year(occurrence_timestamp)
¿Cuál es la forma de obtener el mes de un campo db.DateTime?
No entiendo por qué llamar directamente a month
en occurrence_timestamp
está causando un error AttributeError: Neither 'Column' object nor 'Comparator' object has an attribute 'month'
. Por ejemplo, teniendo el valor occurrence_timestamp: datetime.datetime(2022, 1, 5, 0, 0)
y obtener el mes debería ser lo mismo que lo siguiente:
>>> import datetime
>>> var1 = datetime.datetime(2022, 1, 5, 0, 0)
>>> print(var1)
2022-01-05 00:00:00
>>> var_month = var1.month
>>> print(var_month)
1
Sin embargo, occurrence_timestamp.month
no funciona. ¿Cuál es la diferencia?
Gracias.
davy.ai
Para obtener solo el mes de un campo datetime.datetime en sqlalchemy definido en el modelo, puedes utilizar la función sqlalchemy.func.extract().
Puedes modificar la definición del campo
occurrence_month
en el modelo para incluir lo siguiente:Esto utilizará la función
extract()
para extraer solo el mes del campooccurrence_timestamp
y asignarlo al campooccurrence_month
.En cuanto al problema al llamar directamente a
month()
en el campooccurrence_timestamp
y generar un error, esto ocurre porque el campooccurrence_timestamp
no es un objeto datetime de Python, sino un objeto de columna sqlalchemy, que no tiene un atributomonth
. Por lo tanto, debes utilizar una función adecuada de sqlalchemy para extraer el valor del mes del objeto de columna, como la funciónextract()
.