Note
Access to this page requires authorization. You can try signing in or changing directories.
Access to this page requires authorization. You can try changing directories.
In this quickstart, you connect a Python script to a database that you 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.
The mssql-python driver doesn't require any external dependencies on Windows machines. The driver installs everything that it needs with a single pip install, allowing you to use the latest version of the driver for new scripts without breaking other scripts that you don't have time to upgrade and test.
mssql-python documentation | mssql-python source code | Package (PyPi) | Visual Studio Code
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. 
 
- A database on SQL Server, Azure SQL Database, or SQL database in Fabric with the - AdventureWorks2022sample schema and a valid connection string.
Setup
Follow these steps to configure your development environment to develop an application using the mssql-python Python driver.
Note
This driver uses the Tabular Data Stream (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.
- Open a command prompt in an empty directory. 
- Install the - mssql-pythonpackage.
Install python-dotenv package
Get the python-dotenv from PyPI.
- In the same directory, install the - python-dotenvpackage.- pip install python-dotenv
Check installed packages
You can use the PyPI command-line tool to verify that your intended packages are installed.
- 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
- Create a new file named - app.py.
- Add a module docstring. - """ Connects to a SQL database using mssql-python """
- Import packages, including - mssql-python.- from os import getenv from dotenv import load_dotenv from mssql_python import connect
- Use the - mssql-python.connectfunction to connect to a SQL database.- load_dotenv() conn = connect(getenv("SQL_CONNECTION_STRING"))
- In the current directory, create a new file named - .env.
- Within the - .envfile, 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. If you're connecting to an Azure SQL Database or a SQL database in Fabric, use the ODBC connection string from the connection strings tab. You might need to adjust the authentication type depending on your scenario. 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.
- 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; """
- Use - cursor.executeto 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(). 
- Use - cursor.fetchallwith a- foreachloop to get all the records from the database. Then print the records.- records = cursor.fetchall() for r in records: print(f"{r.CustomerID}\t{r.OrderCount}\t{r.CompanyName}")
- Save the - app.pyfile.
Tip
To use Microsoft Entra Authentication in macOS, you need to be logged in by running az login via the Azure Command-Line Interface (CLI).
- 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.
- Add an import for - randrangefrom the- randomlibrary to the top of- app.py.- from random import randrange
- At the end of - app.pyadd 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. 
- Create a SQL statement string. - SQL_STATEMENT = """ INSERT SalesLT.Product ( Name, ProductNumber, StandardCost, ListPrice, SellStartDate ) OUTPUT INSERTED.ProductID VALUES (?, ?, ?, ?, CURRENT_TIMESTAMP) """
- Execute the statement using - cursor.execute.- cursor.execute( SQL_STATEMENT, ( f'Example Product {productNumber}', f'EXAMPLE-{productNumber}', 100, 200 ) )
- 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.rollbackto roll back the transaction.
- Close the cursor and connection using - cursor.closeand- connection.close.- cursor.close() conn.close()
- Save the - app.pyfile 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.