Wie kann ich eine Multi-Anweisung-Funktion oder Prozedur bei der Verwendung der MySQLdb-Lib in Python definieren?Erstellen Sie Funktion über MySQLdb
Beispiel:
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 ;""")
Welche der folgenden Zurückverfolgungs erstellt:
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")
Wenn ich die gleiche SQL direkt in einer MySQL-Shell-Client kopieren, wie erwartet
arbeitet
wenn Sie nicht müssen. Führen Sie beispielsweise ein Skript zur Datenbankerstellung aus. Gibt es irgendeine Möglichkeit, nur SQL-Rohdaten an MySql weiterzuleiten? –
@BryanHunt, Sie können kein beliebiges SQL-Skript über die dynamische SQL-API senden, da mehrere Befehle nur vom mysql-Client und nicht vom SQL-Parser des Servers erkannt werden. –
Bill, danke für die Klarstellung. B –