簡體   English   中英

Python:如何連接到MySQL數據庫

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM