sqlalchemy 操作错误:(操作错误)(1045,“用户访问被拒绝

liv*_*hak 3 python mysql sqlalchemy

我正在尝试在运行 12.04 的 Ubuntu 计算机上使用 mysql 创建远程数据库。

它有一个启用了远程登录的根用户。我已经启动了服务器。

的输出

sudo netstat -tap | grep mysql
Run Code Online (Sandbox Code Playgroud)

节目

tcp        0      0 *:mysql                 *:*                     LISTEN      13135/mysqld 
Run Code Online (Sandbox Code Playgroud)

在也运行 Ubuntu 12.04 的客户端计算机上,我使用 python 脚本通过 sqlalchemy 连接到远程 mysql 数据库。

from pox.core import core
import pox.openflow.libopenflow_01 as of
import re
import datetime
import time
from sqlalchemy import create_engine, ForeignKey
from sqlalchemy import Column, Date, Integer, String
from sqlalchemy.ext.declarative import declarative_base
from sqlalchemy.orm import relationship, backref
from sqlalchemy import create_engine
from sqlalchemy.orm import sessionmaker
from sqlalchemy.sql.expression import exists

log = core.getLogger()

engine = create_engine('mysql://root:pass@192.168.129.139/home/karthik.sharma/ms_thesis/nwtopology.db', echo=False)

Base = declarative_base()
Session = sessionmaker(bind=engine)
session = Session()

class SourcetoPort(Base):
    """"""
    __tablename__ = 'source_to_port'
    id = Column(Integer, primary_key=True)
    port_no        = Column(Integer)
    src_address    = Column(String,index=True)

    #-----------------------------------------
    def __init__(self, src_address,port_no):
        """"""
        self.src_address = src_address
        self.port_no     = port_no
Run Code Online (Sandbox Code Playgroud)

create_engine() 调用失败并出现以下错误。

  return dialect.connect(*cargs, **cparams)
  File "/usr/lib/python2.7/dist-packages/sqlalchemy/engine/default.py", line 280, in connect
    return self.dbapi.connect(*cargs, **cparams)
  File "/usr/lib/python2.7/dist-packages/MySQLdb/__init__.py", line 81, in Connect
    return Connection(*args, **kwargs)
  File "/usr/lib/python2.7/dist-packages/MySQLdb/connections.py", line 187, in __init__
    super(Connection, self).__init__(*args, **kwargs2)
OperationalError: (OperationalError) (1045, "Access denied for user 'root'@'openflow.ems.com' (using password: YES)") None None
Run Code Online (Sandbox Code Playgroud)

我不明白为什么会发生这种情况?非常感谢任何帮助?

vvl*_*rov 6

首先,mysql不喜欢你的root用户密码。

您的连接 URI 的 root 用户密码为pass

engine = create_engine('mysql://root:pass@192.168.129.139/home/karthik.sharma/ms_thesis/nwtopology.db', echo=False)
Run Code Online (Sandbox Code Playgroud)

因此,您需要做的是配置 root 用户密码,并授予从运行应用程序的主机到数据库服务器和应用程序的访问权限。这是执行此操作的分步指南

有一种方法可以通过在运行 mysql 服务器的mysql -u root -p同一服务器上运行命令,以 root 用户身份从命令行访问 mysql 数据库。默认情况下,mysql 配置为允许 root 用户使用空密码从本地主机登录。

请尝试配置 mysql 数据库访问,如果有任何问题,请随时将您的问题发布到 stackoverflow。

而且 mysql URI看起来也没什么不同:

'mysql://root:pass@192.168.129.139/nwtopology'
Run Code Online (Sandbox Code Playgroud)