Früher habe ich immer benutzt, um etwas wie ...Python MySQL - Rückkehr Cursor und Verbindung von Funktion
def getConn():
cnx = mysql.connector.connect(user='user', password='pass',
host='hostIP',
database='database')
cur = cnx.cursor(buffered=True)
return [cnx, cur]
CNX und Köter Objekte für den Einsatz zurück. Das funktioniert gut.
Ich brauche jetzt eine SSH-Verbindung zu einem DB.
Das folgende Beispiel führt die Abfrage in der Funktion, sondern die CNX oder Köter Objekte zur Verwendung danach nicht zurück, so erhalte ich einen Druck des Ergebnisses durch den Fehler gefolgt
mysql.connector.errors.InterfaceError: 2013: Lost connection to MySQL server during query
I erscheinen das gleiche Problem zu haben (obwohl ein anderer Fehler zurückgegeben wurde) Why won't Python return my mysql-connector cursor from a function?
Diese Frage befasst sich mit warum - Ich würde gerne wissen, ob es eine Lösung gibt.
def returnConnect():
mypkey = paramiko.RSAKey.from_private_key_file('/Users/me/.ssh/id_rsa')
sql_hostname = '127.0.0.1'
with SSHTunnelForwarder(
(ssh_host, ssh_port),
ssh_username=ssh_user,
ssh_pkey=mypkey,
remote_bind_address=(sql_hostname, sql_port)) as tunnel:
cnx = mysql.connector.connect(host='127.0.0.1', user=sql_username,
passwd=sql_password, db=sql_main_database,
port=tunnel.local_bind_port)
cur = cnx.cursor(buffered=True)
sql = "select * from table"
cur.execute(sql)
result = cur.fetchall()
print result
return [cnx, cur]
conn = returnConnect()
cnx = conn[0]
cur = conn[1]
sql = "select * from table"
cur.execute(sql)
result = cur.fetchall()
cnx.close()
print result
Ja - das funktioniert super. Liest "mit" und auch gute Praxis beim Öffnen und Schließen des SSH-Tunnels. –