Cómo usar la marca de tiempo en el procedimiento almacenado de MySQL

Soy nuevo en stackoverflow. Además, por favor, perdóname por mi inglés.

Tengo una pregunta sobre el uso de la marca de tiempo en el proceso almacenado de MySQL. Estoy usando el módulo MySQL 5 y MySQLdb Python (Python versión 2.6). Aquí hay un código para crear mi procedimiento almacenado:

def create_procedure_sum_shift ():
    global cursor

    cursor.execute("CREATE PROCEDURE `sum_shift`\
    (IN s_Time DATETIME, IN e_Time DATETIME)\
    BEGIN\
    SET @q = concat('SELECT * FROM trig_test WHERE `t_stamp`>=',\
    s_Time,' AND `t_stamp` <= ', e_Time);\
    PREPARE query FROM @q;\
    EXECUTE query;\
    deallocate prepare query;\
    END;")

Cuando intento crear este proceso, todo está bien. Pero, cuando llamo a este proceso, aparece un error. Aquí hay una llamada de este procedimiento:

def call_sum_shift(startDate, endDate):
    global cursor
    cursor.execute("call sum_shift(DATE('%s'),DATE('%s'));" % (startDate, endDate))
    rows = cursor.fetchall()
    discr = cursor.description
    return rows,discr

startDate (y endDate) obtengo esto:

time = datetime.datetime(2012, 07, 25, 8, 00, 00)
startDate = str (time)

Aquí está el error:

..._mysql_exceptions.ProgrammingError:(1064,"You have an error...for the right syntax to    use near '00:00:00 AND `t_stamp` <= 2012-07-25 00:00:00` at line 1)

¿Dónde está mi error? Si es posible, proporcione un ejemplo del uso de la "marca de tiempo" en el proceso almacenado de MySQL.

Gracias de antemano.

preguntado el 29 de julio de 12 a las 12:07

1 Respuestas

Usar concat está generando una cadena de consulta que contiene una representación textual de DateTime que debe incluirse en '. Esto no se está haciendo.

Respondido 29 Jul 12, 13:07

También ten cuidado con inyección SQL en su procedimiento almacenado. - Vatev

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.