Edit

Share via


Quickstart: Connect with the mssql-python driver for Python

In this quickstart, you connect a Python script to a database that you have created and loaded with sample data. You use the mssql-python driver for Python to connect to your database and perform basic operations, like reading and writing data.

mssql-python documentation | mssql-python source code | Package (PyPi)

Prerequisites

  • Python 3

    • If you don't already have Python, install the Python runtime and Python Package Index (PyPI) package manager from python.org.

    • Prefer to not use your own environment? Open as a devcontainer using GitHub Codespaces.

  • mssql-python package from PyPI.

  • A database on SQL Server, Azure SQL Database, or SQL database in Fabric with the AdventureWorks2022 sample schema and a valid connection string.

Setting up

Follow these steps to configure your development environment to develop an application using the mssql-python Python driver.

Note

This driver uses the TDS protocol, which is enabled by default in SQL Server, SQL database in Fabric and Azure SQL Database. No extra configuration is required.

Install the mssql-python package

Get the mssql-python package from PyPI.

  1. Open a command prompt in an empty directory.

  2. Install the mssql-python package.

    pip install mssql-python
    

Check installed packages

You can use the PyPI command-line tool to verify that your intended packages are installed.

  1. Check the list of installed packages with pip list.

    pip list
    

Create a SQL database

This quickstart requires the AdventureWorks2022 Lightweight schema, on Microsoft SQL Server, SQL database in Fabric or Azure SQL Database.

Run the code

Create a new file

  1. Create a new file named app.py.

  2. Add a module docstring.

    """
    Connects to a SQL database using mssql-python
    """
    
  3. Import packages, including mssql-python.

    from os import getenv
    from dotenv import load_dotenv
    from mssql_python import connect
    
  4. Use the mssql-python.connect function to connect to a SQL database.

    load_dotenv()
    conn = connect(getenv("SQL_CONNECTION_STRING"))
    
  5. In the current directory, create a new file named *.env.

  6. Within the *.env file, add an entry for your connection string named SQL_CONNECTION_STRING. Replace the example here with your actual connection string value.

    SQL_CONNECTION_STRING="Server=<server_name>;Database={<database_name>};Encrypt=yes;TrustServerCertificate=no;Authentication=ActiveDirectoryInteractive"
    

    Tip

    The connection string used here largely depends on the type of SQL database you're connecting to. For more information on connection strings and their syntax, see connection string syntax reference.

Execute a query

Use a SQL query string to execute a query and parse the results.

  1. Create a variable for the SQL query string.

    SQL_QUERY = """
    SELECT
    TOP 5 c.CustomerID,
    c.CompanyName,
    COUNT(soh.SalesOrderID) AS OrderCount
    FROM
    SalesLT.Customer AS c
    LEFT OUTER JOIN SalesLT.SalesOrderHeader AS soh ON c.CustomerID = soh.CustomerID
    GROUP BY
    c.CustomerID,
    c.CompanyName
    ORDER BY
    OrderCount DESC;
    """
    
  2. Use cursor.execute to retrieve a result set from a query against the database.

    cursor = conn.cursor()
    cursor.execute(SQL_QUERY)
    

    Note

    This function essentially accepts any query and returns a result set, which can be iterated over with the use of cursor.fetchone().

  3. Use cursor.fetchall with a foreach loop to get all the records from the database. Then print the records.

    records = cursor.fetchall()
    for r in records:
        print(f"{r[0]}\t{r[2]}\t{r[1]}")
    
  4. Save the app.py file.

  5. Open a terminal and test the application.

    python app.py
    

    Here's the expected output.

    29485   1       Professional Sales and Service
    29531   1       Remarkable Bike Store
    29546   1       Bulk Discount Store
    29568   1       Coalition Bike Company
    29584   1       Futuristic Bikes
    

Insert a row as a transaction

Execute an INSERT statement safely and pass parameters. Passing parameters as values protects your application from SQL injection attacks.

  1. Add an import for randrange from the random library to the top of app.py.

    from random import randrange
    
  2. At the end of app.py add code to generate a random product number.

    productNumber = randrange(1000)
    

    Tip

    Generating a random product number here ensures that you can run this sample multiple times.

  3. Create a SQL statement string.

    SQL_STATEMENT = """
    INSERT SalesLT.Product (
    Name,
    ProductNumber,
    StandardCost,
    ListPrice,
    SellStartDate
    ) OUTPUT INSERTED.ProductID
    VALUES (?, ?, ?, ?, CURRENT_TIMESTAMP)
    """
    
  4. Execute the statement using cursor.execute.

    cursor.execute(
        SQL_STATEMENT,
        (
            f'Example Product {productNumber}',
            f'EXAMPLE-{productNumber}',
            100,
            200
        )
    )
    
  5. Fetch the single result using cursor.fetchone, print the result's unique identifier, and then commit the operation as a transaction using connection.commit.

    result = cursor.fetchone()
    print(f"Inserted Product ID : {result['ProductID']}")
    conn.commit()
    

    Tip

    Optionally, you can use connection.rollback to roll back the transaction.

  6. Close the cursor and connection using cursor.close and connection.close.

    cursor.close()
    conn.close()
    
  7. Save the app.py file and test the application again.

    python app.py
    

    Here's the expected output.

    Inserted Product ID : 1001
    

Next step

Visit the mssql-python driver GitHub repository for more examples, to contribute ideas or report issues.