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