es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

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.

Tags:  , , ,

Answer

  1. Avatar for 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:

    from sqlalchemy import func
    
    'occurrence_month': db.Column(db.Integer, default=func.extract('month', occurrence_timestamp))
    

    Esto utilizará la función extract() para extraer solo el mes del campo occurrence_timestamp y asignarlo al campo occurrence_month.

    En cuanto al problema al llamar directamente a month() en el campo occurrence_timestamp y generar un error, esto ocurre porque el campo occurrence_timestamp no es un objeto datetime de Python, sino un objeto de columna sqlalchemy, que no tiene un atributo month. Por lo tanto, debes utilizar una función adecuada de sqlalchemy para extraer el valor del mes del objeto de columna, como la función extract().

Comments are closed.