[英]Python: How to connect to a MySQL db
我正在嘗試編寫一個腳本,該腳本連接到服務器,然后連接到MySQL數據庫(我目前可以通過Navicat進行此操作-因此我知道用於MySQL連接的用戶名和密碼是正確的)。
到目前為止,這是我寫的內容:
import socket
from ssh2.session import Session
import mysql.connector
host = 'servername.logserverlog.net'
user = 'username'
sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sock.connect((host, 22))
session = Session()
session.handshake(sock)
session.userauth_publickey_fromfile(user, r'C:\Users\user\Docs\ssh-key')
cnx = mysql.connector.connect(user='username', password='$gHj1aFaVFRfhl*C', database='analyst_db')
我得到的錯誤是:
_auth_switch_request中的第176行的文件“ C:\\ Users \\ user \\ AppData \\ Local \\ Programs \\ Python \\ Python36-32 \\ lib \\ site-packages \\ mysql \\ connector \\ connection.py”引發錯誤。get_exception(packet)mysql。 connector.errors.ProgrammingError:1045(28000):用戶'username'@'localhost'的訪問被拒絕(使用密碼:是)
鑒於我已經確認我的用戶名和密碼有效,因此我還嘗試將密碼字符串編輯為原始字符串(以查看MySQL數據庫是否正確地接收了Python字符串),並收到了相同的錯誤。
因此,我不確定為什么錯誤不斷出現。
我最終了解到,僅僅因為我創建了SSH連接,我仍然需要設置具有端口轉發功能的SSH隧道,因此腳本知道在何處進行通信。 我假設連接本身會告訴腳本在哪里看(實際上,端口轉發告訴它在哪里看和聽)。
所以我跳過了一步。 最終的工作腳本使用sshtunnel庫中的SSHTunnelForwarder。
import mysql.connector
from datetime import date, datetime, timedelta
from sshtunnel import SSHTunnelForwarder
ssh_host = 'servername.net'
ssh_port = 22
ssh_user = 'serveruser'
ssh_key = "C:\\Users\\user\\ssh\\public key"
ssh_remote_port = 3306
with SSHTunnelForwarder(
(ssh_host, ssh_port),
ssh_username=ssh_user,
ssh_private_key=ssh_key,
remote_bind_address=('127.0.0.1', ssh_remote_port)
) as server:
cnx = mysql.connector.connect(user='username', password='password', database='analyst_db, host='localhost', port=server.local_bind_port)
cur = cnx.cursor()
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.