首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >Python:如何连接到MySQL数据库

Python:如何连接到MySQL数据库
EN

Stack Overflow用户
提问于 2018-08-16 14:18:03
回答 1查看 618关注 0票数 0

我正在尝试编写一个连接到服务器的脚本,然后连接到一个Navicat (目前我可以通过MySQL完成-这样我就可以知道我的MySQL连接的用户名和密码是正确的)。

以下是我到目前为止写的内容:

代码语言:javascript
复制
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')

我得到的错误是:

文件“C:\Users\user\AppData\Local\Programs\Python\Python36-32\lib\site- packages\mysql\connector\connection.py“,第176行,在_auth_switch_request提升errors.get_exception(数据包) mysql.connector.errors.ProgrammingError: 1045 (28000):拒绝访问用户‘username’@‘localhost’(使用密码: YES)

鉴于我已经确认我的用户名和密码有效,我还尝试将密码字符串编辑为原始字符串(以查看MySQL数据库是否以某种方式未正确接收Python字符串),并收到相同的错误。

所以,我不确定为什么错误总是出现。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-18 07:07:25

我最终了解到,仅仅因为我创建了一个SSH连接,我仍然需要设置一个带有端口转发的SSH隧道,以便脚本知道在哪里通信。我假设连接本身会告诉脚本在哪里查找(而实际上端口转发告诉它在哪里查找和侦听)。

所以我跳过了一步。最终的工作脚本使用sshtunnel库中的SSHTunnelForwarder。

代码语言:javascript
复制
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()
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51870699

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档