![](/img/trans.png)
[英]In SQLAlchemy, can I create an Engine from an existing ODBC connection?
[英]How can I create an ODBC connection to SAS?
我正在编写一个需要访问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 ODBC驱动程序指南 ,“我需要什么软件?”部分。
您的问题并未声明您正在尝试通过正在运行的SAS产品访问SAS数据。 SAS ODBC驱动程序指南应该告诉您如何根据要进行连接的SAS产品设置连接。
我知道这个问题很古老,但它可能经常出现,我将分享我所知道的答案。 实现您要做的事情的最简单方法是创建所谓的“DSN-Less Connection”。
简而言之,您创建了一个在打开连接时使用的连接字符串,用于标识驱动程序并包含您在为该驱动程序创建DSN时通常填写的所有参数。
这项技术已经存在了很长时间 - 我在2001年使用它,它比它更老。
以下是一系列用于通过ODBC访问SAS数据的DSN-Less连接字符串示例:
使用Server ID Provider=sas.ShareProvider;Data Source=shr1;
SAS / SHARE使用服务器ID和节点(网络名称)Provider = sas.ShareProvider; Data Source = shr1; Location = lambchop.unx.sas.com;
SAS / SHARE指定用户和密码Provider=sas.ShareProvider;Data Source=shr1;Location=lambchop.unx.sas.com; User ID=myUsername;Password=myPassword;
Provider=sas.ShareProvider;Data Source=shr1;Location=lambchop.unx.sas.com; User ID=myUsername;Password=myPassword;
SAS / SHARE服务器需要密码Provider=sas.ShareProvider;Data Source=shr1;Location=lambchop.unx.sas.com; User ID=myUsername;Password=myPassword; SAS Server Access Password=myServerPassword;
Provider=sas.ShareProvider;Data Source=shr1;Location=lambchop.unx.sas.com; User ID=myUsername;Password=myPassword; SAS Server Access Password=myServerPassword;
这些来自: https : //www.connectionstrings.com/sas-share/
SAS支持页面更多地讨论了这个问题 - 我在这里找到了它: http ://docslide.us/documents/opening-an-ado-connection-object.html
我知道zilch关于SAS,但用于在ODBC中动态连接数据库的函数是SQLDriverConnect 。 您不需要(或想要)添加DSN,只需安装驱动程序即可。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.