Добавьте пользовательское DSN ODBC, используя python ctypes.windll.ODBCCP32.SQLConfigDataSource - PullRequest
0 голосов
/ 30 мая 2019

Я пытаюсь добавить новый источник данных ODBC в python и нашел этот код онлайн, который, кажется, работает с 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'))

Может ли кто-нибудь помочь с решением этой проблемы или предоставить решение для добавления новых источников данных ODBC с использованием Python. Спасибо!

1 Ответ

0 голосов
/ 30 мая 2019

Чтобы подключиться к серверу SQL с помощью Python 3, я использую приведенный ниже оператор и могу получить данные без каких-либо ошибок.

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
...