按DSN连接失败,并显示“无效用户名或密码”,但DSN确实具有正确的用户名和密码

2024-04-27 03:13:29 发布

您现在位置:Python中文网/ 问答频道 /正文

我尝试使用以下小脚本从OS/X 10.10.2连接到vertica数据库:

#!/usr/bin/python

import sys

import pyodbc

def usage(retval):
    if retval == 0:
        file_ = sys.stdout
    else:
        file_ = sys.stderr

    file_.write('Usage: {} --query sql_query --dsn data_source_name\n'.format(sys.argv[0]))

    sys.exit(retval)

def main():
    query = None
    dsn = None
    while sys.argv[1:]:
        if sys.argv[1] == '--query':
            query = sys.argv[2]
            del sys.argv[1]
        elif sys.argv[1] == '--dsn':
            dsn = sys.argv[2]
            del sys.argv[1]
        elif sys.argv[1] in {'-h', '--help'}:
            usage(0)
        else:
            sys.stderr.write('{}: Unrecognized option: {}\n'.format(sys.argv[0], sys.argv[1]))
            usage(1)
        del sys.argv[1]

    if query is None:
        sys.stderr.write('{}: --query is a required option\n'.format(sys.argv[0]))
        usage(1)

    if dsn is None:
        sys.stderr.write('{}: --dsn is a required option\n'.format(sys.argv[0]))
        usage(1)

    connection_string = 'DSN={}'.format(dsn)
    sys.stderr.write('connection_string is {}\n'.format(connection_string))
    connection = pyodbc.connect(connection_string)
    cursor = connection.cursor()
    cursor.execute(query)

    # Fetchall might be faster, but it also has memory limit issues
    for row in cursor:
        print(row)


main()

按如下方式调用此脚本:

^{pr2}$

…失败的原因是:

21L, 1L, u"FAILED: ('28000', '[28000] FATAL 3781:  Invalid username or password\\n (3781) (SQLDriverConnect)')", u'unique_seconds', ...

…在同一行再加上一点文字,另外一行我为保护而删除。在

我有另一个(大得多)程序,可以使用相同的DSN进行良好连接,而无需提示输入用户名或密码。在

/Library/ODBC中的相关DSN/odbc.ini文件如下所示(主机名、用户名和密码已更改以进行保护):

Driver      = Vertica
Description = Glitch Vertica Meta Data DSN
Database    = Analytics
Servername  = hostname
UID         = username
PWD         = password
PORT        = 5433
SSLMode     = require

我对脚本进行了DTrus,发现它在/Library/ODBC中查找/odbc.ini文件-或者更确切地说,它使用ODBCINI环境变量进行适当设置。如果没有这个变量,它似乎忽略了我的odbc.ini文件. 在

有人知道为什么认证失败吗?在

谢谢!在


Tags: noneformatstringifisstderrsysusage