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

声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow 原文地址: http://stackoverflow.com/questions/2357547/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me): StackOverFlow

提示:将鼠标放在中文语句上可以显示对应的英文。显示中英文
时间:2020-11-04 00:26:29  来源:igfitidea点击:

How can I create an ODBC connection to SAS?

pythonsasodbc

提问by Chris B.

I'm writing a program that needs to access SAS data. I've downloaded the ODBC drivers for SAS and installed them, but I need to be able to create ODBC connections on the fly, programmatically. The following code (in Python) seems like it should work:

我正在编写一个需要访问 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')

But it pops up the SAS ODBC configuration dialog, sets the datasource name, and waits for the user to enter the information and dismiss the dialog. How can I avoid that?

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

回答by Martin B?gelund

In order to get ODBC access to SAS data, you need to connect to a running SAS session of some kind; you can't access SAS data table files directly with the SAS ODBC drivers.

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

See the SAS ODBC drivers guide, section "What Software Do I Need?".

请参阅SAS ODBC 驱动程序指南,“我需要什么软件?”一节。

Your question doesn't state that you are trying to access SAS data through a running SAS product. The SAS ODBC drivers guide should tell you how to set up the connection based on the SAS product you will make the connection through.

您的问题并未说明您正在尝试通过正在运行的 SAS 产品访问 SAS 数据。SAS ODBC 驱动程序指南应该告诉您如何根据您将通过的 SAS 产品建立连接。

回答by Carnot Antonio Romero

I know this question is ancient but it probably comes up often enough that I will share the answer I know. The easiest way to achieve what you are trying to do is create what's called a "DSN-Less Connection."

我知道这个问题很古老,但它可能经常出现,我会分享我知道的答案。实现您的目标的最简单方法是创建所谓的“无 DSN 连接”。

Briefly, you create a connect string that you use when opening a connection, that identifies the driver and includes all the parameters you'd normally fill in in creating a DSN for that driver.

简而言之,您创建一个在打开连接时使用的连接字符串,它标识驱动程序并包括您通常在为该驱动程序创建 DSN 时填写的所有参数。

This technique has been around for a very long time-- I was using it in 2001, and it's older than that.

这种技术已经存在很长时间了——我在 2001 年使用它,它比那更古老。

Here is a series of sample DSN-Less connection strings for accessing SAS data via ODBC:

下面是一系列示例 DSN-Less 连接字符串,用于通过 ODBC 访问 SAS 数据:

Using Server ID Provider=sas.ShareProvider;Data Source=shr1;

使用服务器 ID Provider=sas.ShareProvider;Data Source=shr1;

SAS/SHARE Using Server ID and node (network name) Provider=sas.ShareProvider;Data Source=shr1;Location=lambchop.unx.sas.com;

SAS/SHARE 使用服务器 ID 和节点(网络名称)Provider=sas.ShareProvider;Data Source=shr1;Location=lambchop.unx.sas.com;

SAS/SHARE Specifying user and password 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/SHARE Server requires a password Provider=sas.ShareProvider;Data Source=shr1;Location=lambchop.unx.sas.com; User ID=myUsername;Password=myPassword; SAS Server Access Password=myServerPassword;

SAS/SHARE 服务器需要密码 Provider=sas.ShareProvider;Data Source=shr1;Location=lambchop.unx.sas.com; User ID=myUsername;Password=myPassword; SAS Server Access Password=myServerPassword;

These are from: https://www.connectionstrings.com/sas-share/

这些来自:https: //www.connectionstrings.com/sas-share/

A SAS support page discusses this more-- I found it here: http://docslide.us/documents/opening-an-ado-connection-object.html

SAS 支持页面对此进行了更多讨论——我在这里找到了它:http://docslide.us/documents/opening-an-ado-connection-object.html

回答by Carnot Antonio Romero

I know zilch about SAS, but the function used to connect to a database on the fly in ODBC is SQLDriverConnect. You don't need (or want) to add a DSN, you just need the drivers installed.

我知道关于 SAS 的 zilch,但是用于在 ODBC 中动态连接到数据库的函数是SQLDriverConnect。您不需要(或不想)添加 DSN,您只需要安装驱动程序。