我正在尝试在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数据源的解决方案。谢谢!
答案 0 :(得分:0)
要使用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