使用 python ctypes.windll.ODBCCP32.SQLConfigDataSource 添加 ODBC 用户 DSN

Posted

技术标签:

【中文标题】使用 python ctypes.windll.ODBCCP32.SQLConfigDataSource 添加 ODBC 用户 DSN【英文标题】:Add ODBC user DSN using python ctypes.windll.ODBCCP32.SQLConfigDataSource 【发布时间】:2019-05-30 20:00:28 【问题描述】:

我正在尝试在 python 中添加新的 ODBC 数据源,并在网上发现此代码似乎适用于 python 2(正如其他人提到但我没有尝试过)但不适用于 python 3(我使用的是 3.6) .代码运行没有错误,但没有向系统添加新的 DSN(总是返回 0)。

我四处搜索,发现有人提到这可能是由于编码问题,所以我尝试将属性部分更改为具有不同编码的字节(nul.join(attrib)),但它们都不起作用。

这里是部分代码:

ODBC_ADD_DSN = 1        # Add data source, user DSN only
ODBC_CONFIG_DSN = 2     # Configure (edit) data source
ODBC_REMOVE_DSN = 3     # Remove data source
ODBC_ADD_SYS_DSN = 4    # add a system DSN
ODBC_CONFIG_SYS_DSN = 5 # Configure a system DSN
ODBC_REMOVE_SYS_DSN = 6 # remove a system DSN

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

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

#
if __name__ == "__main__":
    print (add_dsn('test', 'SQL Server', server='(local)', description = 'Testing'))

任何人都可以帮助解决此问题或提供使用 python 添加新 ODBC 数据源的解决方案。谢谢!

【问题讨论】:

【参考方案1】:

要使用 python 3 连接到 SQL Server,我使用以下语句并且可以获取数据而不会出现任何错误。

import pyodbc
import pandas as pd
cnxn = pyodbc.connect(driver='SQL Server', server='YourServer', database='YourDBName',               
               trusted_connection='yes')
cursor = cnxn.cursor()

然后您可以使用 pd.read_sql 命令检索任何数据。

print(pd.read_sql("SELECT * FROM [fruits]",cnxn))

数据库输出:

  fruiteater       Fruit1  Fruit2       Fruit3 Fruit4       Fruit5  Fruit6
      Aaron       Orange    Pear        Apple   None         None    None
         Bob        Apple  Orange  Blueberries  Peach        Mango  Banana
      Carter         Pear  Orange        Apple   None         None    None
       David  Blueberries    None         None   None         None    None
     Earnest        Mango  Orange         Pear  Apple  Blueberries    None
       Frank  Raspberries    None         None   None         None    None

【讨论】:

以上是关于使用 python ctypes.windll.ODBCCP32.SQLConfigDataSource 添加 ODBC 用户 DSN的主要内容,如果未能解决你的问题,请参考以下文章

python使用cookie登陆网页

Python基础 -- Python环境的安装pip的使用终端运行python文件Pycharm的安装和使用Pycharm基本设置:设置Python文件默认格式

在python使用SSL(HTTPS)

python 爬虫使用方法分享——安装python

python基础之从认识python到python的使用

python文档翻译之使用python解释器