繁体   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