02-03-2021, 10:07 AM (Última modificación: 16-03-2021, 12:23 PM por Francisco.)
Buenos días Foro
Tengo el siguiente problema para lograr la conexión con Sql Server 2016 Express como motor de base de datos.
Mi configuración en Django es :
"C:\Users\xx\AppData\Roaming\Python\Python38\site-packages\sql_server\pyodbc\base.py", line 312, in get_new_connection
conn = Database.connect(connstr,
django.db.utils.OperationalError: ('08001', '[08001] [Microsoft][ODBC Driver 17 for SQL Server]TCP Provider: No se puede establecer una conexión ya que el equipo de destino denegó expresamente dicha conexión.\r\n (10061) (SQLDriverConnect); [08001] [Microsoft][ODBC Driver 17 for SQL Server]Login timeout expired (0); [08001] [Microsoft][ODBC Driver 17 for SQL Server]Invalid connection string attribute (0); [08001] [Microsoft][ODBC Driver 17 for SQL Server]A network-related or instance-specific error has occurred while establishing a connection to SQL Server. Server is not found or not accessible. Check if instance name is correct and if SQL Server is configured to allow remote connections. For more information see SQL Server Books Online. (10061)')
Por lo que veo en la documentación de ese error, por alguna razón tu servidor de SQL Server rechaza la conexión. ¿Vos podés chequear la conexión con algún comando (como sqlcmd) o visor de SQL Server que tengas instalado?
La configuración de Django y el driver parecen estar bien.
Saludos
¡No te pierdas nuestro curso oficial en Udemy para aprender Python, bases de datos SQL, orientación a objetos, tkinter y mucho más!
Sigo con el problema de conexión con SQL Server 2016 y he realizado las pruebas pertinentes, con sqlcmd y la conectividad es positiva. (Adjunto imágen en cmd).
El error en Django sigo teniéndolo:
Exception ignored in thread started by: <function check_errors.<locals>.wrapper at 0x04027658>
Traceback (most recent call last):
File "C:\Program Files (x86)\Python38-32\lib\site-packages\django\utils\autoreload.py", line 225, in wrapper
fn(*args, **kwargs)
File "C:\Program Files (x86)\Python38-32\lib\site-packages\django\core\management\commands\runserver.py", line 120, in inner_run
self.check_migrations()
File "C:\Program Files (x86)\Python38-32\lib\site-packages\django\core\management\base.py", line 442, in check_migrations
executor = MigrationExecutor(connections[DEFAULT_DB_ALIAS])
File "C:\Program Files (x86)\Python38-32\lib\site-packages\django\db\migrations\executor.py", line 18, in __init__
self.loader = MigrationLoader(self.connection)
File "C:\Program Files (x86)\Python38-32\lib\site-packages\django\db\migrations\loader.py", line 49, in __init__
self.build_graph()
File "C:\Program Files (x86)\Python38-32\lib\site-packages\django\db\migrations\loader.py", line 212, in build_graph
self.applied_migrations = recorder.applied_migrations()
File "C:\Program Files (x86)\Python38-32\lib\site-packages\django\db\migrations\recorder.py", line 61, in applied_migrations
if self.has_table():
File "C:\Program Files (x86)\Python38-32\lib\site-packages\django\db\migrations\recorder.py", line 44, in has_table
return self.Migration._meta.db_table in self.connection.introspection.table_names(self.connection.cursor())
File "C:\Program Files (x86)\Python38-32\lib\site-packages\django\db\backends\base\base.py", line 255, in cursor
return self._cursor()
File "C:\Program Files (x86)\Python38-32\lib\site-packages\django\db\backends\base\base.py", line 232, in _cursor
self.ensure_connection()
File "C:\Program Files (x86)\Python38-32\lib\site-packages\django\db\backends\base\base.py", line 216, in ensure_connection
self.connect()
File "C:\Program Files (x86)\Python38-32\lib\site-packages\django\db\utils.py", line 89, in __exit__
raise dj_exc_value.with_traceback(traceback) from exc_value
File "C:\Program Files (x86)\Python38-32\lib\site-packages\django\db\backends\base\base.py", line 216, in ensure_connection
self.connect()
File "C:\Program Files (x86)\Python38-32\lib\site-packages\django\db\backends\base\base.py", line 194, in connect
self.connection = self.get_new_connection(conn_params)
File "C:\Program Files (x86)\Python38-32\lib\site-packages\sql_server\pyodbc\base.py", line 299, in get_new_connection
conn = Database.connect(connstr,
django.db.utils.OperationalError: ('08001', '[08001] [Microsoft][ODBC Driver 17 for SQL Server]Named Pipes Provider: Could not open a connection to SQL Server [67]. (67) (SQLDriverConnect); [08001] [Microsoft][ODBC Driver 17 for SQL Server]Login timeout expired (0); [08001] [Microsoft][ODBC Driver 17 for SQL Server]Invalid connection string attribute (0); [08001] [Microsoft][ODBC Driver 17 for SQL Server]A network-related or instance-specific error has occurred while establishing a connection to SQL Server. Server is not found or not accessible. Check if instance name is correct and if SQL Server is configured to allow remote connections. For more information see SQL Server Books Online. (67)')
Francisco realice lo que me pediste y no llego ha tener conectividad. Te pido disculpas amigo pero sigo con este inconveniente y no puedo avanzar.
Gracias por estar y disculpas si te distraigo
En el Host de tu settings.py tenés DESKTOP-LIC371L/SQLEXPRESS, ¿no debería ser DESKTOP-LIC371LSQLEXPRESS? No estoy seguro de que SQL Server soporte indistintamente cualquiera de las dos barras. En Django quedaría con doble barra:
Código:
'HOST': 'DESKTOP-LIC371L\SQLEXPRESS',
Fijate si con eso lográs conectarte, o al menos un error diferente, eso ya sería un avance!
Saludos
¡No te pierdas nuestro curso oficial en Udemy para aprender Python, bases de datos SQL, orientación a objetos, tkinter y mucho más!
10-03-2021, 03:38 PM (Última modificación: 10-03-2021, 03:45 PM por Francisco.)
Hola, Fabián.
Acabo de hacer una prueba con SQL Server 2017 y me funciona correctamente. La única forma en que pude replicar tu error es intencionalmente poniendo un HOST erróneo. La forma correcta de indicar el HOST en Python sería esta:
Código:
'HOST': 'DESKTOP-LIC371L\SQLEXPRESS',
Pero dado que eso ya probaste y no funciona, podrías intentar poniendo la dirección de IP directamente, por ejemplo:
Código:
'HOST': '172.27.96.1',
¿Tenés SQL Server instalado en la misma PC desde la cual estás ejecutando tu proyecto de Django? Porque puede ser que algún firewall bloquee la conexión del proceso de Python. Si es la misma PC, deberías poder decir:
Código:
'HOST': 'localhost',
Saludos
¡No te pierdas nuestro curso oficial en Udemy para aprender Python, bases de datos SQL, orientación a objetos, tkinter y mucho más!