python-3.x 如何防止pymysql(或mysql.connector)解析localhost到IPv6?

4xrmg8kj  于 2023-11-20  发布在  Python
关注(0)|答案(1)|浏览(81)

我试图从我的主机提供商的服务器上的Python连接到MySQL。我已经创建了我的数据库,我可以通过SSH和PHP连接到它。当我尝试使用Python连接时,我得到一个错误Access denied for user 'user_name'@'::1' (using password: YES)
我想这可能是由于Python将localhost解析为IPv6。我可能没有权限访问我的用户在[::1]或127.0.0.1上,只有在localhost上。有可能防止这种行为吗?
如果不是比我可以尝试什么或者我应该问我的主机连接到数据库?
我尝试了pymysql和mysql.connector,结果都一样。
我试着将主机更改为127.0.0.1或[::1]。我的主机特别说明我应该连接本地主机。
我的简短测试脚本:

import os
import sys
import pymysql
pymysql.install_as_MySQLdb()
import mysql.connector

sys.path.insert(0, os.path.dirname(__file__))

def application(environ, start_response):
    start_response('200 OK', [('Content-Type', 'text/plain')])
    message = 'It works!\n'
    version = 'Python v' + sys.version.split()[0] + '\n'
    
    conn_message = ''
    
    
    conn = mysql.connector.connect(host='localhost', user='user_name', password='password', database='db_name', port=3306)
    # conn = pymysql.connect(host='localhost', user='user_name', passwd='password', db='db_name', port=3306)
    
    if conn:
        conn_message = 'MySQL: Yes :)'
    else:
        conn_message = 'MySQL: No :('

    conn.close()

    response = '\n'.join([message, version, conn_message])
    return [response.encode()]

字符串

8qgya5xd

8qgya5xd1#

您可以使用以下命令更新用户表

UPDATE mysql.user SET host = 'localhost' WHERE user = 'user_name'

字符串
localhost将首先尝试打开一个套接字,然后尝试打开一个tco/ip连接。
但是你的服务器好像不支持tcp/ip连接。

相关问题