Per qualche strano motivo non riesco a ottenere risultati da una chiamata callproc in un'app di prova Python. La stored procedure in MqSQL 5.2.47 si presenta così:Impossibile restituire i risultati dalla stored procedure utilizzando il cursore Python
Ora, usando PyCharm con Python 3.3, non riesco a recuperare nulla quando si chiama la stored procedure. Questo codice mi ottiene i risultati desiderati:
import mysql.connector
cnx = mysql.connector.connect(user='root', host='127.0.0.1', database='mytestdb')
cnx._open_connection()
cursor = cnx.cursor()
cursor.execute("select * from person where person.person_id = 1")
people = cursor.fetchall()
for person in people:
print(person)
cnx.close()
ma questo codice sia con cursor.fetchall() o cursor.fetchone() ...
import mysql.connector
cnx = mysql.connector.connect(user='root', host='127.0.0.1', database='mytestdb')
cnx._open_connection()
cursor = cnx.cursor()
cursor.callproc("getperson", [1])
people = cursor.fetchall()
for person in people:
print(person)
cnx.close()
... restituisce "mysql.connector. errors.InterfaceError: nessun risultato impostato per il recupero da. " C'è un comportamento strano aggiuntivo utilizzando il metodo cursor.execute() in questo modo ...
import mysql.connector
cnx = mysql.connector.connect(user='root', host='127.0.0.1', database='mytestdb')
cnx._open_connection()
cursor = cnx.cursor()
cursor.execute("call getperson(1)")
people = cursor.fetchall()
for person in people:
print(person)
cnx.close()
... perché produce "mysql.connector.errors.InterfaceError: Usa cmd_query_iter per le dichiarazioni con più query", seguito da "mysql.connector.errors.InterfaceError: usa multi = True quando si eseguono più istruzioni" nonostante il fatto che sto restituendo solo un risultato di una query piuttosto che più set di risultati. Il connettore Python MySQL considera la chiamata execute sulla stored procedure come una doppia query? Come posso chiamare la stored procedure e ottenere i miei risultati? Non voglio davvero SQL dinamico nel mio codice. Grazie in anticipo per qualsiasi consiglio!
Non sarebbe più della sintassi SQL server di MySQL? –
Perché non è un comando valido in PL/SQL di MySQL. È un comando valido per T-SQL di SQL Server, ma non è quello che sto utilizzando per questo progetto. La sintassi di MySQL per invocare stored procedure è 'call proc_name ([argomenti])'. – gfish3000