No se puede conectar a SQL Server a través de pymssql

Estoy intentando conectarme a SQL Server que se ejecuta en el sistema Windows XP desde un sistema * nix en un servidor local a través de pymssql. Sin embargo, la conexión falla como se muestra a continuación

db = pymssql.connect(host='192.168.1.102',user='www',password='test',database='TestDB') Traceback (most recent call last): File "", line 1, in  File "pymssql.pyx", line 457, in pymssql.connect (pymssql.c:6041) raise InterfaceError(e[0]) pymssql.InterfaceError: Connection to the database failed for an unknown reason. 

Cosas que he probado:

  1. Configure SQL Server y el navegador para que se ejecuten como un servidor de red.
  2. Configurar un usuario ‘www’. También probé este usuario localmente en SQL Studio.
  3. Desactivado el firewall de Windows (temporalmente, por supuesto).

Me estoy perdiendo ALGO – Simplemente no sé qué es. Probé todas las infinitas opciones de menú en Windows sin éxito. Una cosa que noté es que si el Firewall de Windows está activado (configuro una excepción para SQL Server), python se detiene por un tiempo prolongado y luego da el error. Si el firewall está apagado el error es instantáneo.

¿Hay algún registro que pueda ver en SQL Server?

¡Lo tengo! Creo que la fuente del problema fue no darle a TDS gratis la atención que necesita. El TDS gratuito es aparentemente el controlador detrás de pymssql y proporciona conectividad a otras bases de datos, siendo SQL Server una de ellas.

El archivo freetds.conf se encuentra en / usr / local / etc en mi sistema (Mac Book Pro).

Este archivo contiene los valores predeterminados de la instalación. Sin embargo, previamente había agregado una definición para poder conectarme pero olvidarme de ella y, lamentablemente, no tomé notas al respecto.

De todos modos, aquí hay un ejemplo de lo que agregué a freetds.conf:

 [SomeDB] host = 192.168.1.102 port = 1219 tds version = 7.0 

Sin embargo, lo sorprendente es que configuré el puerto en 1219. Lo configuré manualmente en 1433 en SQL Studio. Además, estoy usando TDS versión 0.82, así que no sé cómo encaja 7.0.

A continuación, probé la conectividad usando ‘tsql’ de la siguiente manera:

 tsql -S SomeDB -U www 

Ingreso la contraseña y obtengo una línea de comandos que permite realizar consultas SQL.

A continuación, probé la conexión usando pymssql de la siguiente manera:

 db = pymssql.connect(host='SomeDB',user='www',password='cylon',database='TestDB') 

Como puede ver, necesitaba usar el nombre de host del archivo freetds.conf y NO la IP directamente. Luego probé una consulta simple con código python adicional para asegurarme de que podía leer desde la base de datos.

Espero que esto ayude a alguien más en el futuro.

Parece que tienes esto resuelto, pero para cualquier otra persona de google que llegue aquí: asegúrate de que la autorización de modo mixto esté activada en tu MS SQL Server. Por defecto, solo permite la autorización de Windows, y eso causará este error en pymssql .

¿Es una máquina de windows u trabajando? especifique el puerto 1433. parece ser un error en la API del cliente mssql, que intenta utilizar Namedpipes en lugar de TCP / IP.