无法通过Python连接到AWS RDS上的SQL Server

时间:2019-11-22 03:49:36

标签: python sql-server amazon-web-services

我正在尝试将python终端连接到AWS RDS上的SQL Server数据库。

我仔细阅读了Microsoft文档here,并在Stack Overflow上看到了很多其他问题,但是我认为我的独特问题是将连接过程映射到特定方面RDS环境,我不确定我的环境是否设置正确,并且找不到直接映射到我要研究的问题的问题。

我现在拥有的权利:

import pyodbc as pydb

connection = pydb.connect('DRIVER={SQL Server};PORT=1433;SERVER=aws-database-endpoint;UID=instance-master-username;PWD=instance-password;DATABASE=db-instance-id')

print("Connecting....")

connection.close()

并获得以下回溯:

InterfaceError: ('28000', "[28000] [Microsoft][ODBC SQL Server Driver][SQL Server]Login failed for user 'admin'. (18456) (SQLDriverConnect); [28000] [Microsoft][ODBC SQL Server Driver]Invalid connection string attribute (0); [28000] [Microsoft][ODBC SQL Server Driver][SQL Server]Login failed for user 'admin'. (18456); [28000] [Microsoft][ODBC SQL Server Driver]Invalid connection string attribute (0)")

为提供更多详细信息,以下是我的数据库设置当前的样子:

对于端口和服务器,我从这里获取信息:

enter image description here

对于UID,我要转到RDS --> Databases,单击我的实例,然后转到Configuration,然后输入Master Username,即{{ 1}},如下所示:

enter image description here

对于我的admin值,我位于同一位置,并使用DATABASE,可在此处看到:

enter image description here

我创建了一个规则,该规则允许我的IP地址通过此处的VPC资源组用于传入TCP流量:

enter image description here

我也尝试过的:

  • 使用我的帐户ID作为database instance-id参数
  • 使用我的AWS用户名作为UID参数
  • 数据库可公开访问
  • 我曾尝试以root用户和具有管理员权限的IAM用户身份登录

我无法确定我是否犯了笔误,或者是否存在较大的管理员问题,我无法确定。

谢谢。

4 个答案:

答案 0 :(得分:1)

您也可以尝试一下,对我来说,这比pyodbc容易:

import pymssql

connection={
   'host': '',
   'username': '',
   'password': '',
   'db': '' 
}
con=pymssql.connect(connection['host'],connection['username'],connection['password'],connection['db'])

cursor=con.cursor()

答案 1 :(得分:1)

我自己遇到了这个问题,我发现AWS RDS实际上没有给您提供在实例化或后置单词时像在PostreSQL中那样在SQL Server中的实例中命名数据库的选项,而不是为实例提供了名称将此字段留空。您可以通过查看AWS仪表板中实例摘要内的配置选项卡来确认这一点,在数据库名称下,只有一个短划线表示空白字段。我只需从连接字符串中删除数据库名称字段即可解决该问题。因此原始示例的字符串如下所示:

import pyodbc as pydb

connection = pydb.connect('DRIVER={SQL Server};PORT=1433;SERVER=aws-database-endpoint;UID=instance-master-username;PWD=instance-password;')

答案 2 :(得分:0)

使用下面的示例连接,请注意,如果默认端口为1433,则没有端口

cnxn = pyodbc.connect('DRIVER={/opt/microsoft/msodbcsql17/lib64/libmsodbcsql-17.3.so.1.1};SERVER='+server+';DATABASE='+database+';uid='+username+';pwd='+ password) 

如果您是从本地计算机(wsl,linux box或ec2)运行python脚本,请确保正确安装了msodbc驱动程序

答案 3 :(得分:0)

尝试将每个组件都带入一个变量

import pyodbc 

server = 'tcp:myserver.database.windows.net' 
database = 'mydb' 
username = 'myusername' 
password = 'mypassword' 
cnxn = pyodbc.connect('DRIVER={SQL Server};SERVER='+server+';DATABASE='+database+';UID='+username+';PWD='+ password)

cursor = cnxn.cursor()

#Sample select query
query = 'SELECT....'
df = pd.sql_read(query, cnxn)
print(df)