Come definire una funzione o una procedura a più istruzioni nell'uso della libreria MySQLdb in python?Creazione della funzione tramite MySQLdb
Esempio:
import MySQLdb
db = MySQLdb.connect(db='service')
c = db.cursor()
c.execute("""DELIMITER //
CREATE FUNCTION trivial_func (radius float)
RETURNS FLOAT
BEGIN
IF radius > 1 THEN
RETURN 0.0;
ELSE
RETURN 1.0;
END IF;
END //
DELIMITER ;""")
che crea il seguente traceback:
Traceback (most recent call last):
File "proof.py", line 21, in <module>
DELIMITER ;""")
File "build/bdist.macosx-10.5-i386/egg/MySQLdb/cursors.py", line 173, in execute
File "build/bdist.macosx-10.5-i386/egg/MySQLdb/connections.py", line 35, in defaulterrorhandler
_mysql_exceptions.ProgrammingError: (1064, "You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'DELIMITER //\nCREATE FUNCTION trivial_func (radius float) \n RETURNS FLOAT\n\n ' at line 1")
Se copio lo stesso SQL direttamente in un client di shell mysql, funziona come previsto
a meno che non sia necessario. ad esempio, eseguire uno script di creazione del database. c'è un modo per passare semplicemente SQL raw a MySql? –
@BryanHunt, non è possibile inviare uno script SQL arbitrario tramite l'API SQL dinamica, poiché diversi comandi sono riconosciuti solo dal client 'mysql', non dal parser SQL del server. –
Bill, grazie per i chiarimenti. B –