Breaking: mssql-python Now Supports Both Parameter Styles – Python Devs Can Finally End the SQL Placeholder Debate
Breaking: mssql-python Adds Dual Parameter Style Support
In a move that resolves a long-standing developer debate, the mssql-python driver now supports both positional (qmark) and named (pyformat) parameter styles simultaneously. This dual support, announced today, allows Python developers to write SQL queries using either ? placeholders or %(name)s placeholders, ending the need to choose between conciseness and clarity.

"We've added dual parameter style support to mssql-python, enabling both qmark and pyformat parameter styles in Python applications that interact with SQL Server and Azure SQL," said Sumit Sarabhai, a reviewer of the feature. "This is especially useful if you're building complex queries, dynamically assembling filters, or migrating existing code that already uses named parameters with other DBAPI drivers."
Background
The Python DB-API 2.0 specification (PEP 249) defines several ways to pass parameters to SQL queries. The two most popular are positional placeholders (?) and named placeholders (%(name)s). While positional style is concise, it becomes error-prone as the number of parameters grows. Named parameters offer self-documenting queries and reuse.
Previously, mssql-python only supported the qmark style. This worked for simple queries, but tracking parameter order became a source of subtle bugs.
What This Means
For developers, this dual support means greater flexibility and fewer errors. Queries are easier to read and maintain. Migrating code from other DBAPI drivers that rely on named parameters becomes straightforward.
"Mix up the order and it’s easy to introduce subtle, hard-to-spot bugs," Sarabhai added. "Named parameters eliminate that risk."

Parameter reuse is another key advantage. Developers can use the same named value multiple times in a query without repeating the value, reducing redundancy and improving code clarity.
Example: Positional vs. Named
# Positional (qmark) - which ? is which?
cursor.execute("UPDATE users SET name=?, email=?, age=? WHERE id=? AND status=?",
(name, email, age, user_id, status))
# Named (pyformat) - self-documenting
cursor.execute("UPDATE users SET name=%(name)s, email=%(email)s, age=%(age)s WHERE id=%(id)s AND status=%(status)s",
{"name": name, "email": email, "age": age, "id": user_id, "status": status})
How to Try It
The updated driver is available now via pip install mssql-python. The team invites the Python developer community to test the dual parameter style support and provide feedback.
"Calling all Python + SQL developers! We invite the community to try out mssql-python and help us shape the future of high-performance SQL Server connectivity in Python," the announcement concluded.
Industry Reaction
Early adopters have praised the move. "This eliminates a major pain point when working with complex queries in Python," said one developer.
For more details, visit the official documentation.
Related Articles
- Cloudflare Unleashes Autonomous AI Agents to Deploy Apps with Zero Human Intervention
- Gemini API Now Supports Event-Driven Webhooks for Long-Running AI Jobs
- 10 Critical Lessons from the SAP npm Package Attack: Securing Developer Tools and CI/CD Pipelines
- AI Agents Get Free Rein in the Cloud: Cloudflare's Bold New Move
- Python's Official Blog Now Lives on GitHub: What You Need to Know
- Beyond Code: Solving Human Bottlenecks at Scale
- 8 Hal yang Wajib Developer Indonesia Tahu Tentang TestSprite untuk AI Testing Lokal
- 8 Key Insights into Go's Type Construction and Cycle Detection in Go 1.26