我正在尝试将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)")
为提供更多详细信息,以下是我的数据库设置当前的样子:
对于端口和服务器,我从这里获取信息:
对于UID
,我要转到RDS --> Databases
,单击我的实例,然后转到Configuration
,然后输入Master Username
,即{{ 1}},如下所示:
对于我的admin
值,我位于同一位置,并使用DATABASE
,可在此处看到:
我创建了一个规则,该规则允许我的IP地址通过此处的VPC资源组用于传入TCP流量:
我也尝试过的:
database instance-id
参数UID
参数我无法确定我是否犯了笔误,或者是否存在较大的管理员问题,我无法确定。
谢谢。
答案 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)