Estoy intentando establecer una conexión de base de datos de SQL Server con la biblioteca de Python adodbapi y último OLEDB proveedor usando el código siguiente-

import adodbapi
import configparser

def try_connection():    
    _SERVER_NAME = "SERVERNAME"
    _DATABASE = "TESTDB"
    _USERNAME = "TERSTUSER"
    _PASSWORD = "TESTPWD"  

    conn = adodbapi.connect("PROVIDER=MSOLEDBSQL;Data Source={0};Database={1};UID={2};PWD={3};".format(_SERVER_NAME,_DATABASE,_USERNAME,_PASSWORD))
    cursor = conn.cursor()

print( try_connection() )

Pero no puedo hacer la conexión. Estoy obteniendo un error de seguimiento por debajo del cual no puedo entender:

Traceback (most recent call last):
  File "C:\Program Files (x86)\Python 3.5\lib\site-packages\adodbapi\adodbapi.py", line 97, in make_COM_connecter
    c = Dispatch('ADODB.Connection') #connect _after_ CoIninialize v2.1.1 adamvan
NameError: name 'Dispatch' is not defined

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "C:\Program Files (x86)\Python 3.5\lib\site-packages\adodbapi\adodbapi.py", line 116, in connect
    co.connect(kwargs)
  File "C:\Program Files (x86)\Python 3.5\lib\site-packages\adodbapi\adodbapi.py", line 266, in connect
    self.connector = connection_maker()
  File "C:\Program Files (x86)\Python 3.5\lib\site-packages\adodbapi\adodbapi.py", line 99, in make_COM_connecter
    raise api.InterfaceError ("Windows COM Error: Dispatch('ADODB.Connection') failed.")
adodbapi.apibase.InterfaceError: Windows COM Error: Dispatch('ADODB.Connection') failed.

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "TestAdodb.py", line 41, in <module>
    print( try_connection() )
  File "TestAdodb.py", line 18, in try_connection
    conn = adodbapi.connect("PROVIDER=MSOLEDBSQL;Data Source={0};Database={1};UID={2};PWD={3};".format(_SERVER_NAME,_DATABASE,_USERNAME,_PASSWORD))
  File "C:\Program Files (x86)\Python 3.5\lib\site-packages\adodbapi\adodbapi.py", line 120, in connect
    raise api.OperationalError(e, message)
adodbapi.apibase.OperationalError: (InterfaceError("Windows COM Error: Dispatch('ADODB.Connection') failed.",), 'Error opening connection to "PROVIDER=MSOLEDBSQL;Data Source=SERVERNAME;Database=TESTDB;UID=TERSTUSER;PWD=TESTPWD;"')

Por favor, ¿alguien puede decirme qué está mal / falta en mi cadena de conexión?

3
user2961127 20 dic. 2019 a las 19:58

2 respuestas

La mejor respuesta

Citando esto de pypi,

Prerrequisitos:

  • C Python 2.7 o 3.5 o superior y pywin32 (Python de Mark Hammond para extensiones de Windows) o Iron Python 2.7 o superior. (funciona en IPy2.0 para todos los tipos de datos excepto BUFFER)

Instalación:

  • (C-Python en Windows): instale pywin32 ("pip install pywin32") que incluye adodbapi.
  • (IronPython en Windows): descargue adodbapi de http://sf.net/projects/adodbapi. Desempaca la cremallera. Abrir una ventana de comando como administrador CD a la carpeta que contiene los archivos descomprimidos. Ejecute "setup.py install" utilizando el IronPython de su elección.

¿Has instalado todos los requisitos previos para la biblioteca adodbapi?

Pude reproducir el error si no tenía instalada la biblioteca pywin32.

Instale la biblioteca pywin32 utilizando el siguiente comando:

pip install pywin32
2
Saurabh P Bhandari 25 dic. 2019 a las 12:26

Podría ser que win32com / pythoncom no sea compatible con Python 3K (3.0 en adelante) todavía, pero después de un minuto de búsqueda en Google no he encontrado nada útil en eso, se lo dejo a usted.

Este código debe ejecutarse correctamente cuando haya solucionado su problema (y debería fallar en este momento).

import win32com.client
import pythoncom
pythoncom.CoInitialize()
win32com.client.Dispatch('ADODB.Connection')

Además, cualquier excepción que arroje código sería útil para ayudar a depurar su problema.

Referencia: Conexión a SQLServer 2005 con adodbapi

1
Sampath 30 dic. 2019 a las 14:36