我尝试使用以下小脚本从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文件. 在
有人知道为什么认证失败吗?在
谢谢!在
目前没有回答
相关问题 更多 >
编程相关推荐