Conectándose a un servidor Microsoft SQL usando Python

Estoy tratando de conectarme a SQL a través de python para ejecutar algunas consultas en algunas bases de datos SQL en el servidor Microsoft SQL. De mi investigación en línea y en este foro, la biblioteca más prometedora parece ser pyodbc. Así que he hecho el siguiente código.

import pyodbc conn = pyodbc.connect(init_string="driver={SQLOLEDB}; server=+ServerName+; database=+MSQLDatabase+; trusted_connection=true") cursor = conn.cursor() 

y recibe el siguiente error

 Traceback (most recent call last): File "C:\Users...\scrap.py", line 3, in  conn = pyodbc.connect(init_string="driver={SQLOLEDB}; server=+ServerName+; database=+MSQLDatabase+; trusted_connection=true") pyodbc.Error: ('IM002', '[IM002] [Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified (0) (SQLDriverConnect)') 

He mirado las siguientes publicaciones y he intentado cambiar mi controlador a {sql server} y me he conectado usando enlaces ODBC antes en SAS, que es parcialmente en lo que se basa mi código anterior, así que no creo que necesite instalar nada más.

Pyodbc.Error: (‘IM002’, ‘[IM002] [unixODBC] [Driver Manager] No se encontró el nombre de la fuente de datos, y no se especificó ningún controlador predeterminado (0) (SQLDriverConnect)’)

Pyodbc: “No se encontró el nombre de la fuente de datos y no se especificó un controlador predeterminado”

Gracias

Así es como lo hago …

 import pyodbc cnxn = pyodbc.connect("Driver={SQL Server Native Client 11.0};" "Server=server_name;" "Database=db_name;" "Trusted_Connection=yes;") cursor = cnxn.cursor() cursor.execute('SELECT * FROM Table') for row in cursor: print('row = %r' % (row,)) 

Fuentes relevantes:

Una pequeña adición a lo que se ha dicho antes. Es probable que desee devolver un dataframe. Esto se haría como

 import pypyodbc import pandas as pd cnxn = pypyodbc.connect("Driver={SQL Server Native Client 11.0};" "Server=server_name;" "Database=db_name;" "uid=User;pwd=password") df = pd.read_sql_query('select * from table', cnxn) 

En las conexiones de origen de datos entre un cliente y un servidor, hay dos tipos generales: ODBC, que utiliza un CONTROLADOR y OLEDB, que utiliza un PROVEEDOR. Y en el mundo de la progtwigción, es un debate regular sobre qué ruta tomar para conectarse a las fonts de datos.

Está utilizando un proveedor, SQLOLEDB , pero lo está especificando como un controlador. Que yo sepa, ni los módulos pyodbc ni pypyodbc son compatibles con las conexiones de ventana OLEDB. Sin embargo, adodbapi utiliza el ADO de Microsoft como un componente subyacente.

A continuación se muestran los dos enfoques para sus parámetros de conexión. También, formateo de cadena sus variables ya que su concatenación no interrumpió correctamente las comillas dentro de la cadena. Notará que doblo las llaves, ya que se necesita en la cadena de conexión y string.format() también lo usa.

 # PROVIDER import adodbapi conn = adodbapi.connect("PROVIDER=SQLOLEDB;Data Source={0};Database={1}; \ trusted_connection=yes;UID={2};PWD={3};".format(ServerName,MSQLDatabase,username,password)) cursor = conn.cursor() # DRIVER import pyodbc conn = pyodbc.connect("DRIVER={{SQL Server}};SERVER={0}; database={1}; \ trusted_connection=yes;UID={2};PWD={3}".format(ServerName,MSQLDatabase,username,password)) cursor = conn.cursor() 

Prefiero esta manera … fue mucho más fácil

http://www.pymssql.org/en/stable/pymssql_examples.html

 conn = pymssql.connect("192.168.10.198", "odoo", "secret", "EFACTURA") cursor = conn.cursor() cursor.execute('SELECT * FROM usuario') 

Intente usar pytds, funciona en un entorno más complejo que pyodbc y más fácil de configurar.

Lo hice funcionar en Ubuntu 18.04

Ref: https://github.com/denisenkom/pytds

Código de ejemplo en la documentación:

 import pytds with pytds.connect('server', 'database', 'user', 'password') as conn: with conn.cursor() as cur: cur.execute("select 1") cur.fetchall() 

Aquí hay algunas fotos para los novatos.

introduzca la descripción de la imagen aquí

Siguiendo el código de Python funcionó para mí. Para verificar la conexión ODBC, primero creé una aplicación de consola C # de 4 líneas como se indica a continuación.

Código Python

 import pandas as pd import pyodbc cnxn = pyodbc.connect("Driver={SQL Server};Server=serverName;UID=UserName;PWD=Password;Database=RCO_DW;") df = pd.read_sql_query('select TOP 10 * from dbo.Table WHERE Patient_Key > 1000', cnxn) df.head() 

Llamando a un procedimiento almacenado

  dfProcResult = pd.read_sql_query('exec dbo.usp_GetPatientProfile ?', cnxn, params=['MyParam'] ) 

Progtwig C # para comprobar la conexión ODBC

  static void Main(string[] args) { string connectionString = "Driver={SQL Server};Server=serverName;UID=UserName;PWD=Password;Database=RCO_DW;"; OdbcConnection cn = new OdbcConnection(connectionString); cn.Open(); cn.Close(); } 

Un enfoque alternativo sería instalar Microsoft ODBC Driver 13, luego reemplazar SQLOLEDB con ODBC Driver 13 for SQL Server

Saludos.