pymysql.err.InternalError:(1049,“未知数据库”)

Posted

技术标签:

【中文标题】pymysql.err.InternalError:(1049,“未知数据库”)【英文标题】:pymysql.err.InternalError: (1049, "Unknown database") 【发布时间】:2019-04-23 01:19:31 【问题描述】:

我想使用 raspberrypi 中的 python 连接 mysql RDS DB。(我想使用 select 查询从 MySQL 表 'face' 获取 seq。)

我有一个错误,但我无法修复它。

这是rds mysql连接代码:

import rds_config
import pymysql

rds_host = rds_config.rds_host
name = rds_config.rds_user
password = rds_config.rds_pwd
db_name = rds_config.rds_db

conn = pymysql.connect(rds_host, user=name, passwd=password, db=db_name, 
connect_timeout=10)
with conn.cursor() as cur:
    cur.execute("select seq from face")
    conn.commit()

rds_config:

rds_host='rds endpoint'
rds_port=3306
rds_user='user'
rds_pwd='password'
rds_db='db name'

这是回溯:

Traceback (most recent call last):
  File "getRds.py", line 18, in <module>
    conn = pymysql.connect(rds_host, user=name, passwd=password, db=db_name, connect_timeout=10)
  File "/usr/local/lib/python2.7/dist-packages/pymysql/__init__.py", line 94, in Connect
    return Connection(*args, **kwargs)
  File "/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 327, in __init__
    self.connect()
  File "/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 598, in connect
    self._request_authentication()
  File "/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 862, in _request_authentication
    auth_packet = self._process_auth(plugin_name, auth_packet)
  File "/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 933, in _process_auth
    pkt = self._read_packet()
  File "/usr/local/lib/python2.7/dist-packages/pymysql/connections.py", line 683, in _read_packet
    packet.check_error()
  File "/usr/local/lib/python2.7/dist-packages/pymysql/protocol.py", line 220, in check_error
    err.raise_mysql_exception(self._data)
  File "/usr/local/lib/python2.7/dist-packages/pymysql/err.py", line 109, in raise_mysql_exception
    raise errorclass(errno, errval)
pymysql.err.InternalError: (1049, u"Unknown database 'bsb-rds'")

我已经在 vpc 安全组中添加了 IP 地址,并且公共访问已开启。 可以通过 mysql cli 或 workbench 进行连接。

谁能帮助我?

【问题讨论】:

再次检查数据库名称Unknown database 'bsb-rds',如果名称正确则创建它。 【参考方案1】:

我遇到了您的确切问题,我相信我有解决方案:

上下文: 我的技术栈如下所示

使用 AWS RDS (MySQL) 在本地主机上使用 Flask 开发 RDS 实例名称:“test-rds” 实际数据库名称:test-database

这是我的问题所在,我相信您的问题在同一个地方:

您在连接中使用的是 AWS RDS NAME,而不是使用真正的 数据库名称

只需将连接中的数据库名称更改为我通过 MySQL Workbench 设置的真实数据库名称即可解决问题。

读者需要注意的其他事项:

请确保以下几点:

如果您从 AWS VPC 外部进行连接,请确保您已启用公共访问。这是一个巨大的“陷阱”。 (注意安全风险) 确保您的连接没有被 NACL 阻止 确保安全组规则允许您的连接

【讨论】:

【参考方案2】:

tl;博士你需要创建bsb-rd。执行此命令:create database bsb-rds 在 python 或您最喜欢的 sql cli 中使用 cur.execute()

如果您收到此错误,好消息!您可以连接到您的 RDS 实例。这意味着您已经正确设置了安全组,主机 url、用户名、密码和端口都正确!此错误告诉您的是您的数据库 bsb-rds 在您的 RDS 实例上不存在。如果您刚刚创建了 RDS 实例,可能是因为您还没有创建数据库。所以创造吧!

这里有两种方法可以做到这一点

mysql 命令行

在你的终端运行

mysql --host=the_host_address user=your_user_name --password=your_password

然后在mysql shell里面执行

create database bsb-rd;

现在再次尝试您的代码!

Python 与 pymysql

import rds_config

conn = pymysql.connect('hostname', user='username', passwd='password', connect_timeout=10)
with conn.cursor() as cur:
    cur.execute('create database bsb-rd;')

我来到这个页面寻找解决方案,但没有得到它。我最终找到了答案,现在分享对我有帮助的东西。

【讨论】:

以上是关于pymysql.err.InternalError:(1049,“未知数据库”)的主要内容,如果未能解决你的问题,请参考以下文章

pymysql.err.InternalError:

pymysql.err.InternalError:

pymysql.err.InternalError:(1049,“未知数据库”)

InternalError: (pymysql.err.InternalError) (1205, u'Lock wait timeout exceeded; try restarting t

pymysql.err.InternalError: (1054, "Unknown column 'None' in 'field list'")

pymysql模块