Python 如何创建到SAS的ODBC连接?

Python 如何创建到SAS的ODBC连接?,python,sas,odbc,Python,Sas,Odbc,我正在编写一个需要访问SAS数据的程序。我已经下载并安装了SAS的ODBC驱动程序,但我需要能够以编程方式动态创建ODBC连接。以下代码(在Python中)似乎应该可以工作: import ctypes ODBC_ADD_DSN = 1 def add_dsn(name, driver, **kw): nul, attrib = chr(0), [] kw['DSN'] = name for attr, val in kw.iteritems():

我正在编写一个需要访问SAS数据的程序。我已经下载并安装了SAS的ODBC驱动程序,但我需要能够以编程方式动态创建ODBC连接。以下代码(在Python中)似乎应该可以工作:

import ctypes

ODBC_ADD_DSN = 1        

def add_dsn(name, driver, **kw):
    nul, attrib = chr(0), []
    kw['DSN'] = name
    for attr, val in kw.iteritems():
        attrib.append('%s=%s' % (attr, val))

    return ctypes.windll.ODBCCP32.SQLConfigDataSource(0, ODBC_ADD_DSN, driver, nul.join(attrib)) == 1

print add_dsn('SAS Test', 'SAS', description = 'Testing SAS')

但它会弹出SAS ODBC配置对话框,设置数据源名称,并等待用户输入信息并关闭对话框。如何避免这种情况?

为了获得对SAS数据的ODBC访问,您需要连接到某种正在运行的SAS会话;不能使用SAS ODBC驱动程序直接访问SAS数据表文件

请参阅“我需要什么软件?”一节


您的问题没有说明您正试图通过正在运行的SAS产品访问SAS数据。《SAS ODBC驱动程序指南》应告诉您如何根据您将要建立连接的SAS产品设置连接。

我对SAS了解很多,但用于在ODBC中动态连接数据库的功能是。您不需要(或想要)添加DSN,只需要安装驱动程序。

我知道这个问题由来已久,但它可能经常出现,我将分享我知道的答案。要实现您想要做的事情,最简单的方法是创建所谓的“无DSN连接”

简单地说,您可以创建一个连接字符串,在打开连接时使用该字符串来标识驱动程序,并包括在为该驱动程序创建DSN时通常需要填写的所有参数

这项技术已经存在很长时间了——我在2001年使用过它,而且比那还要古老

以下是一系列用于通过ODBC访问SAS数据的无DSN连接字符串示例:

使用服务器ID
Provider=sas.ShareProvider;数据源=shr1

SAS/共享 使用服务器ID和节点(网络名称) Provider=sas.ShareProvider;数据源=shr1;位置=lambchop.unx.sas.com

SAS/共享 指定用户和密码
Provider=sas.ShareProvider;数据源=shr1;位置=lambchop.unx.sas.com;
用户ID=我的用户名;密码=我的密码

SAS/共享 服务器需要密码
Provider=sas.ShareProvider;数据源=shr1;位置=lambchop.unx.sas.com;
用户ID=我的用户名;密码=我的密码;
SAS服务器访问密码=myServerPassword

这些资料来自:

SAS支持页面详细讨论了这一点——我在这里找到了它: