Connecting to Microsoft SQL server using Python Connecting to Microsoft SQL server using Python python python

Connecting to Microsoft SQL server using Python


This is how I do it...

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,))

Relevant resources:


Minor addition to what has been said before. You likely want to return a dataframe. This would be done as

import pypyodbc import pandas as pdcnxn = 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)


In data source connections between a client and server there are two general types: ODBC which uses a DRIVER and OLEDB which uses a PROVIDER. And in the programming world, it is a regular debate as to which route to go in connecting to data sources.

You are using a provider, SQLOLEDB, but specifying it as a driver. As far as I know, neither the pyodbc nor pypyodbc modules support Window OLEDB connections. However, the adodbapi does which uses the Microsoft ADO as an underlying component.

Below are both approaches for your connection parameters. Also, I string format your variables as your concatenation did not properly break quotes within string. You'll notice I double the curly braces since it is needed in connection string and string.format() also uses it.

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