{"id":10105,"date":"2025-08-12T03:10:35","date_gmt":"2025-08-12T11:10:35","guid":{"rendered":"https:\/\/devblogs.microsoft.com\/python\/?p=10105"},"modified":"2025-08-12T03:10:35","modified_gmt":"2025-08-12T11:10:35","slug":"mssql-python-vs-pyodbc-benchmarking-sql-server-performance","status":"publish","type":"post","link":"https:\/\/devblogs.microsoft.com\/python\/mssql-python-vs-pyodbc-benchmarking-sql-server-performance\/","title":{"rendered":"mssql-python vs pyodbc: Benchmarking SQL Server Performance"},"content":{"rendered":"<p><span style=\"font-family: helvetica, arial, sans-serif;\"><!--ScriptorStartFragment--><\/span><\/p>\n<div>\n<p><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\"><a href=\"https:\/\/devblogs.microsoft.com\/azure-sql\/wp-content\/uploads\/sites\/56\/2025\/07\/c1014e61-a66d-4807-ab58-655671044f49.png\"><img decoding=\"async\" class=\"alignnone wp-image-5513 size-large\" src=\"https:\/\/devblogs.microsoft.com\/azure-sql\/wp-content\/uploads\/sites\/56\/2025\/07\/c1014e61-a66d-4807-ab58-655671044f49-1024x519.png\" alt=\"c1014e61 a66d 4807 ab58 655671044f49 image\" width=\"1024\" height=\"519\" \/><\/a><\/span><\/p>\n<p><em><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\">Reviewed by Imran Masud and Sumit Sarabhai<\/span><\/em><\/p>\n<p><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\">When it comes to working with Microsoft SQL Server in Python, <strong>pyodbc<\/strong> has long been the de facto driver. It&#8217;s mature, trusted and has been serving the community well for years.<\/span><\/p>\n<p data-start=\"805\" data-end=\"1050\"><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\">But as applications scale and Python becomes more central to modern data workflows \u2014 from microservices to data engineering and platforms like <a href=\"https:\/\/app.fabric.microsoft.com\"><strong data-start=\"945\" data-end=\"965\">Microsoft Fabric<\/strong><\/a> \u2014 there&#8217;s a growing need to <strong data-start=\"999\" data-end=\"1024\">modernize and improve<\/strong> the developer experience.\u00a0<\/span><\/p>\n<p data-start=\"892\" data-end=\"921\"><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\">So, <strong data-start=\"892\" data-end=\"921\">can we take this further?<\/strong><\/span><\/p>\n<p><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\">Meet <strong><a href=\"https:\/\/github.com\/microsoft\/mssql-python\">mssql-python<\/a><\/strong><strong>\u00a0&#8211;<\/strong> a modern SQL Server driver for Python that rethinks the architecture from the ground up while preserving a familiar experience for developers. It is purpose-built for:<\/span><\/p>\n<ul>\n<li><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\">Security<\/span><\/li>\n<li><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\">Performance<\/span><\/li>\n<li><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\">Memory safety<\/span><\/li>\n<li><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\">Cross-platform support<\/span><\/li>\n<\/ul>\n<p><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\"><div class=\"alert alert-warning\"><strong>Try it here: <a href=\"https:\/\/github.com\/microsoft\/mssql-python\">pip install mssql-python<\/a><\/strong><\/span><\/p>\n<p><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\">Calling all Python + SQL developers! We invite the community to try out mssql-python and help us shape the future of high-performance <a href=\"https:\/\/github.com\/microsoft\/mssql-python\">SQL Server connectivity in Python<\/a>.!<\/div><\/span><\/p>\n<p><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\">To evaluate how it stacks up against pyodbc, we ran a comprehensive suite of performance benchmarks using the excellent <a href=\"https:\/\/github.com\/tonybaloney\/rich-bench\">Richbench<\/a> tool. The results? Let&#8217;s just say they speak volumes.<\/span><\/p>\n<h2><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\">What makes mssql-python different?<\/span><\/h2>\n<h3><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\">Powered by DDBC \u2013 Direct Database Connectivity<\/span><\/h3>\n<p data-start=\"764\" data-end=\"1105\"><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\"><span class=\"TrackChangeTextInsertion TrackedChange TrackChangeHoverSelectColorRed SCXW189702241 BCX8\"><span class=\"TextRun SCXW189702241 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\"><span class=\"NormalTextRun TrackChangeHoverSelectHighlightRed SCXW189702241 BCX8\">Most Python SQL Server drivers, including <\/span><\/span><\/span><strong><span class=\"TrackChangeTextInsertion TrackedChange TrackChangeHoverSelectColorRed SCXW189702241 BCX8\"><span class=\"TextRun SCXW189702241 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\"><span class=\"NormalTextRun SpellingErrorV2Themed TrackChangeHoverSelectHighlightRed SCXW189702241 BCX8\">pyodbc<\/span><\/span><\/span><\/strong><span class=\"TrackChangeTextInsertion TrackedChange TrackChangeHoverSelectColorRed SCXW189702241 BCX8\"><span class=\"TextRun SCXW189702241 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\"><span class=\"NormalTextRun TrackChangeHoverSelectHighlightRed SCXW189702241 BCX8\">, route calls through the Driver Manager, which has slightly different implementations across Windows, macOS, and Linux. This results in inconsistent behavior and capabilities across platforms. Additionally, the Driver Manager must be installed separately, creating friction for both new developers and when deploying applications to servers.<\/span><\/span><\/span><span class=\"EOP TrackedChange SCXW189702241 BCX8\" data-ccp-props=\"{}\">\u00a0<\/span><\/span><\/p>\n<p data-start=\"1107\" data-end=\"1153\"><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\">With <strong>mssql-python<\/strong>, we made a bold decision. At the heart of the driver is <strong data-start=\"2225\" data-end=\"2264\">DDBC (Direct Database Connectivity) <\/strong><\/span><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\">\u2014 a lightweight, high-performance C++ layer that<\/span><span style=\"font-family: 'Trebuchet MS'; font-size: 12.0pt;\"> replaces the platform\u2019s Driver Manager.<\/span><\/p>\n<p data-start=\"1107\" data-end=\"1153\"><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\">Key Advantages:<\/span><\/p>\n<ul style=\"direction: ltr; margin-top: 0in; margin-bottom: 0in;\" type=\"disc\">\n<li style=\"margin-top: 0; margin-bottom: 0; vertical-align: middle;\"><span style=\"font-family: 'Trebuchet MS'; font-size: 12.0pt;\">Provides a consistent, cross-platform backend that handles connections, statements, and memory directly.<\/span><\/li>\n<li style=\"margin-top: 0; margin-bottom: 0; vertical-align: middle;\"><span style=\"font-family: 'Trebuchet MS'; font-size: 12.0pt;\">Interfaces directly with the native SQL Server ODBC driver (msodbcsql18).<\/span><\/li>\n<li style=\"margin-top: 0; margin-bottom: 0; vertical-align: middle;\"><span style=\"font-family: 'Trebuchet MS'; font-size: 12.0pt;\">Integrates with the same TDS core library that powers the ODBC driver.<\/span><\/li>\n<\/ul>\n<h3><span style=\"font-family: 'trebuchet ms', geneva, sans-serif; font-size: 12pt;\">Why This Architecture Matters?<\/span><\/h3>\n<p><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\">By owning the layer that the ODBC driver depends on, DDBC delivers:<\/span><\/p>\n<ul>\n<li><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\"><span class=\"TrackChangeTextInsertion TrackedChange TrackChangeHoverSelectColorRed SCXW260827405 BCX8\"><span class=\"TextRun SCXW260827405 BCX8\" lang=\"EN-US\" xml:lang=\"EN-US\" data-contrast=\"auto\"><span class=\"NormalTextRun TrackChangeHoverSelectHighlightRed SCXW260827405 BCX8\">Provides consistency across platforms.<\/span><\/span><\/span><span class=\"EOP TrackedChange SCXW260827405 BCX8\" data-ccp-props=\"{}\">\u00a0<\/span><\/span><\/li>\n<li><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\">Lower function call overhead<\/span><\/li>\n<li><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\">Zero external dependencies (<strong>pip install mssql-python<\/strong> is all you need)\u00a0<\/span><\/li>\n<li><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\">Full control over connections, memory and statement handling\u00a0<\/span><\/li>\n<\/ul>\n<p><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\">This architecture gives mssql-python its core advantages &#8211; <strong>speed<\/strong>, <strong>control<\/strong>\u00a0and <strong>simplicity<\/strong>.<\/span><\/p>\n<h3><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\">Built with PyBind11 + Modern C++ for Performance and Safety<\/span><\/h3>\n<p><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\">To expose the DDBC engine to Python, mssql-python uses PyBind11 &#8211; a modern C++ binding library, instead of ctypes.\u00a0<\/span><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\">Why is that important?<\/span><\/p>\n<p style=\"margin: 0in; font-family: 'Trebuchet MS'; font-size: 12.0pt;\">With ctypes, every call between Python and the ODBC driver involved costly type conversions, manual pointer management, and is slow and unsafe.<\/p>\n<p style=\"margin: 0in; font-family: 'Trebuchet MS'; font-size: 12.0pt;\">PyBind11 solves all of this. It provides:<\/p>\n<ul>\n<li><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\">Native-speed execution with automatic type conversions<\/span><\/li>\n<li><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\">Memory-safe bindings<\/span><\/li>\n<li><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\">Driver API feel clean and Pythonic, while the performance-critical logic remains in robust, maintainable C++.<\/span><\/li>\n<\/ul>\n<h2><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\">Benchmark Setup<\/span><\/h2>\n<ul>\n<li><strong><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\">Client Machine<\/span><\/strong>\n<ul>\n<li><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\">Windows 11 Pro (64-bit)<\/span><\/li>\n<li><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\">Intel Core i7 (12th Gen), 32 GB RAM, NVMe SSD<\/span><\/li>\n<li><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\">Python 3.13.5(64-bit)<\/span><\/li>\n<\/ul>\n<\/li>\n<li><strong><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\">Database<\/span><\/strong>\n<ul>\n<li><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\">Azure SQL Database<\/span><\/li>\n<li><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\">General Purpose (<\/span><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\">Serverless)<\/span><\/li>\n<li><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\">vCores: 1<\/span><\/li>\n<li><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\">Max storage: 32 GB<\/span><\/li>\n<\/ul>\n<\/li>\n<li><strong><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\">Driver Versions<\/span><\/strong>\n<ul>\n<li><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\">mssql-python: v0.8.1<\/span><\/li>\n<li><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\">pyodbc: v5.2.0\u00a0\u00a0<\/span><\/li>\n<\/ul>\n<\/li>\n<li><strong><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\">Tools<\/span><\/strong>\n<ul>\n<li><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\">richbench \u2013 5 runs \u00d7 5 samples per operation<\/span><\/li>\n<\/ul>\n<\/li>\n<li><strong><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\">Connection Pooling<\/span><\/strong>\n<ul>\n<li><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\">Enabled in both drivers to simulate realistic app conditions<\/span><\/li>\n<\/ul>\n<\/li>\n<li><strong><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\">Benchmark script<\/span><\/strong>\n<ul>\n<li><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\">Following is the snippet of the benchmark script used:<\/span><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/azure-sql\/wp-content\/uploads\/sites\/56\/2025\/07\/image-4.png\"><img decoding=\"async\" class=\"alignnone wp-image-5683 size-large\" src=\"https:\/\/devblogs.microsoft.com\/azure-sql\/wp-content\/uploads\/sites\/56\/2025\/07\/image-4-1024x463.png\" alt=\"image 4 image\" width=\"1024\" height=\"463\" \/><\/a><\/p>\n<p><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\"><div class=\"alert alert-primary\"><p class=\"alert-divider\"><i class=\"fabric-icon fabric-icon--Info\"><\/i><strong>Benchmark Script<\/strong><\/p>If you want to reproduce or extend our tests, checkout the complete script on <a href=\"https:\/\/github.com\/microsoft\/mssql-python\/blob\/main\/benchmarks\/bench_mssql.py\">GitHub<\/a>.<\/div><\/span><\/p>\n<h2><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\">Benchmark Summary<\/span><\/h2>\n<p><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\">mssql-python outperforms pyodbc across most operations:<\/span><\/p>\n<table style=\"border-collapse: collapse; width: 100%;\">\n<tbody>\n<tr style=\"height: 24px;\">\n<td style=\"width: 51.8869%; height: 24px;\">\n<div><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\"><!--ScriptorStartFragment--><strong>Category<\/strong><\/span><\/div>\n<\/td>\n<td style=\"width: 50%;\"><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\"><strong>mssql-python<\/strong> vs.<strong> pyodbc<\/strong><\/span><\/td>\n<\/tr>\n<tr>\n<td style=\"width: 51.8869%;\"><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\"><strong>Core SQL<\/strong> (SELECT, INSERT, UPDATE, DELETE)<\/span><\/td>\n<td style=\"width: 50%;\"><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\">2\u00d7 to 4\u00d7 faster<\/span><\/td>\n<\/tr>\n<tr>\n<td style=\"width: 51.8869%;\"><strong><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\">Join, Nested, and Complex Queries<\/span><\/strong><\/td>\n<td style=\"width: 50%;\"><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\">3.6\u00d7 to 4\u00d7 faster<\/span><\/td>\n<\/tr>\n<tr>\n<td style=\"width: 51.8869%;\"><strong><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\">Fetch Operations (One &amp; Many)<\/span><\/strong><\/td>\n<td style=\"width: 50%;\"><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\">3.6 to ~3.7\u00d7 faster<\/span><\/td>\n<\/tr>\n<tr>\n<td style=\"width: 51.8869%;\"><strong><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\">Stored Procedures, Transactions<\/span><\/strong><\/td>\n<td style=\"width: 50%;\"><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\">~2.1\u00d7 to ~2.6\u00d7 faster<\/span><\/td>\n<\/tr>\n<tr>\n<td style=\"width: 51.8869%;\"><strong><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\">Batch Inserts<\/span><\/strong><\/td>\n<td style=\"width: 50%;\"><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\">\ud83d\udd25~8.6x faster<\/span><\/td>\n<\/tr>\n<tr>\n<td style=\"width: 51.8869%;\"><strong><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\">1000 Connections<\/span><\/strong><\/td>\n<td style=\"width: 50%;\"><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\">\ud83d\udd2516.5x faster<\/span><\/td>\n<\/tr>\n<\/tbody>\n<\/table>\n<p style=\"margin: 0in; font-family: 'Trebuchet MS'; font-size: 12.0pt;\">Across the board, the mssql-python driver demonstrated significantly faster execution times for common SQL operations, especially on:<\/p>\n<ul style=\"direction: ltr; margin-top: 0in; margin-bottom: 0in;\" type=\"disc\">\n<li style=\"margin-top: 0; margin-bottom: 0; vertical-align: middle;\"><span style=\"font-family: 'Trebuchet MS'; font-size: 12.0pt;\">Lightweight query handling<\/span><\/li>\n<li style=\"margin-top: 0; margin-bottom: 0; vertical-align: middle;\"><span style=\"font-family: 'Trebuchet MS'; font-size: 12.0pt;\">Fast connection reuse<\/span><\/li>\n<li style=\"margin-top: 0; margin-bottom: 0; vertical-align: middle;\"><span style=\"font-family: 'Trebuchet MS'; font-size: 12.0pt;\">Low-latency fetches and inserts<\/span><\/li>\n<\/ul>\n<p style=\"margin: 0in; font-family: 'Trebuchet MS'; font-size: 12.0pt;\">These results indicate highly efficient execution paths, minimal overhead, and strong connection reuse capabilities.<\/p>\n<p><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\"><div class=\"alert alert-warning\"><p class=\"alert-divider\"><i class=\"fabric-icon fabric-icon--Warning\"><\/i><strong>Disclaimer on Performance Benchmarks<\/strong><\/p>The performance tests comparing mssql-python and pyodbc were conducted using a controlled set of queries designed to evaluate core driver capabilities. Real-world results may vary based on query patterns, data volumes, and system configurations.<\/span><\/p>\n<p><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\">We welcome feedback and real-world usage insights from the community. If you encounter performance issues or have suggestions, <a href=\"https:\/\/github.com\/microsoft\/mssql-python\/issues\">please raise issues on Github<\/a>, we\u2019re actively listening and committed to improving the experience.<\/div><\/span><\/p>\n<h3><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\">Visual Snapshot<\/span><\/h3>\n<p><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\">We captured this benchmark data in a clean tabular format using richbench tool. Here&#8217;s a quick glance at the relative performance:<\/span><\/p>\n<p><a href=\"https:\/\/devblogs.microsoft.com\/azure-sql\/wp-content\/uploads\/sites\/56\/2025\/07\/undefined.png\"><img decoding=\"async\" class=\"alignnone wp-image-5626 size-large\" src=\"https:\/\/devblogs.microsoft.com\/azure-sql\/wp-content\/uploads\/sites\/56\/2025\/07\/undefined-1024x380.png\" alt=\"undefined image\" width=\"1024\" height=\"380\" \/><\/a><\/p>\n<h3><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\">Analysis &amp; Insights<\/span><\/h3>\n<ul>\n<li><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\"><strong>Low-Latency Wins<\/strong>: SELECT, UPDATE, DELETE saw the largest improvements from 2\u00d7 to 4\u00d7 faster.<\/span><\/li>\n<li><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\"><strong>Complex Queries<\/strong>: Joins and Nested Queries showed ~4\u00d7 improvements, due to lower per-call overhead and faster execution cycle.<\/span><\/li>\n<li><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\"><strong>Optimized Fetching<\/strong>: fetchone() and fetchmany() showed strong gains due to better buffer handling.<\/span><\/li>\n<li><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\"><strong>Connection Scaling<\/strong>: Creating 1000 concurrent connections was 16.5\u00d7 faster, thanks to optimized pooling and connection caching in DDBC.<\/span><\/li>\n<li><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\"><strong>Bulk Insert Gains<\/strong>: Inserts ran 8.6\u00d7 faster, aided by native buffer reuse and low-level batching.<\/span><\/li>\n<\/ul>\n<h3><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\">What&#8217;s Next?<\/span><\/h3>\n<p><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\">We\u2019re actively improving the driver and here\u2019s what\u2019s in the pipeline:<\/span><\/p>\n<ul>\n<li><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\"><strong data-start=\"2730\" data-end=\"2751\">Seamless Migration Support<\/strong>: We&#8217;re working on making the migration experience from pyodbc seamless, with familiar APIs and helpful migration guides.<\/span><\/li>\n<li><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\">Performance benchmarks for Linux and macOS environments.<\/span><\/li>\n<li><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\"><strong>Stress-testing<\/strong> under real-world application loads.<\/span><\/li>\n<li><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\"><strong>Bulk Copy\u00a0(BCP) support<\/strong> for ultra-fast ingestion.<\/span><\/li>\n<li><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\">Community engagement for feedback and contributions.<\/span><\/li>\n<\/ul>\n<p><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\">Performance tuning is a key priority, and we\u2019re committed to delivering consistent improvements in upcoming releases.<\/span><\/p>\n<h3><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\">Join the Journey<\/span><\/h3>\n<p><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\">If you&#8217;re building high-performance apps with SQL Server in Python, mssql-python is a fast, modern and compelling alternative to pyodbc. It is:<\/span><\/p>\n<ul>\n<li><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\">Faster across key operations<\/span><\/li>\n<li><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\">Safe and memory efficient<\/span><\/li>\n<li><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\">Architected for modern Python-C++ interoperability<\/span><\/li>\n<li><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\">Easy to install and integrate<\/span><\/li>\n<\/ul>\n<p data-start=\"3157\" data-end=\"3428\"><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\"><div class=\"alert alert-info\"><p class=\"alert-divider\"><i class=\"fabric-icon fabric-icon--Info\"><\/i><strong><strong>Join the<\/strong> <strong>Early Customer Program<\/strong><\/strong><\/p>If you&#8217;re interested in becoming an early dogfooder and showcase your journey at <strong>Microsoft Ignite<\/strong> &#8211; we\u2019d love to hear from you!<\/span><\/p>\n<p data-start=\"3157\" data-end=\"3428\"><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\"><a href=\"https:\/\/forms.office.com\/Pages\/ResponsePage.aspx?id=v4j5cvGGr0GRqy180BHbR2zU_uGppNJNrSzeov2g9ahUQllYWUQzUlpJQzlVQkcwUzE2UFdERFQ1Mi4u\">Apply here to join the <strong>Early Customer Program<\/strong><\/a>.<\/span><\/p>\n<p data-start=\"3157\" data-end=\"3428\"><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\">\ud83d\ude80Get early access, influence the roadmap, and work directly with the team!<\/div><\/span><\/p>\n<h3><strong><span style=\"font-family: 'trebuchet ms', geneva, sans-serif; font-size: 14pt;\">Try It and Share Your Feedback!\u00a0<\/span><\/strong><\/h3>\n<p><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\">We invite you to:\u00a0<\/span><\/p>\n<ol>\n<li><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\">Check-out the <a href=\"https:\/\/github.com\/microsoft\/mssql-python\">mssql-python\u00a0<\/a>driver and integrate it into your projects.\u00a0<\/span><\/li>\n<li><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\">Share your thoughts:\u00a0Open <a href=\"https:\/\/github.com\/microsoft\/mssql-python\/issues\">issues<\/a>, suggest features, and contribute to the project.\u00a0<\/span><\/li>\n<li><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\">Join the conversation:\u00a0<a href=\"https:\/\/github.com\/microsoft\/mssql-python\/discussions\">GitHub Discussions<\/a>\u00a0|\u00a0<a href=\"https:\/\/techcommunity.microsoft.com\/category\/sql-server\/blog\/sqlserver\">SQL Server Tech Community<\/a>.\u00a0<\/span><\/li>\n<\/ol>\n<p><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\"><div class=\"alert alert-success\"><p class=\"alert-divider\"><i class=\"fabric-icon fabric-icon--Lightbulb\"><\/i><strong>Use Python Driver with Free Azure SQL Database<\/strong><\/p>You can use the Python Driver with the free version of Azure SQL Database!<\/span><\/p>\n<p><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\">\u2705 <a href=\"https:\/\/learn.microsoft.com\/en-us\/azure\/azure-sql\/database\/free-offer?view=azuresql\">Deploy Azure SQL Database for free<\/a><\/span><\/p>\n<p><span style=\"font-family: 'trebuchet ms', geneva, sans-serif;\">\u2705 <a href=\"https:\/\/learn.microsoft.com\/en-us\/azure\/azure-sql\/managed-instance\/free-offer?view=azuresql\">Deploy Azure SQL Managed Instance for free<\/a> Perfect for testing, development, or learning scenarios without incurring costs.<\/div><\/span><\/p>\n<ul>\n<li style=\"list-style-type: none;\"><\/li>\n<\/ul>\n<\/div>\n<p><!--ScriptorEndFragment--><\/p>\n","protected":false},"excerpt":{"rendered":"<p>Reviewed by Imran Masud and Sumit Sarabhai When it comes to working with Microsoft SQL Server in Python, pyodbc has long been the de facto driver. It&#8217;s mature, trusted and has been serving the community well for years. But as applications scale and Python becomes more central to modern data workflows \u2014 from microservices to [&hellip;]<\/p>\n","protected":false},"author":194671,"featured_media":10119,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_acf_changed":false,"footnotes":""},"categories":[3,1],"tags":[1277,1281,17,1283,1282,1278,1280],"class_list":["post-10105","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-azure","category-python","tag-azure-sql","tag-client-driver","tag-python","tag-python-driver-for-azure-sql","tag-python-driver-for-sql-server","tag-sql-server","tag-sql-server-2025"],"acf":[],"blog_post_summary":"<p>Reviewed by Imran Masud and Sumit Sarabhai When it comes to working with Microsoft SQL Server in Python, pyodbc has long been the de facto driver. It&#8217;s mature, trusted and has been serving the community well for years. But as applications scale and Python becomes more central to modern data workflows \u2014 from microservices to [&hellip;]<\/p>\n","_links":{"self":[{"href":"https:\/\/devblogs.microsoft.com\/python\/wp-json\/wp\/v2\/posts\/10105","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/devblogs.microsoft.com\/python\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/devblogs.microsoft.com\/python\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/python\/wp-json\/wp\/v2\/users\/194671"}],"replies":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/python\/wp-json\/wp\/v2\/comments?post=10105"}],"version-history":[{"count":0,"href":"https:\/\/devblogs.microsoft.com\/python\/wp-json\/wp\/v2\/posts\/10105\/revisions"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/python\/wp-json\/wp\/v2\/media\/10119"}],"wp:attachment":[{"href":"https:\/\/devblogs.microsoft.com\/python\/wp-json\/wp\/v2\/media?parent=10105"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/python\/wp-json\/wp\/v2\/categories?post=10105"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/devblogs.microsoft.com\/python\/wp-json\/wp\/v2\/tags?post=10105"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}