Skip to main content

A high-performance Python library for Microsoft SQL Server using Rust and Tiberius

Project description

Fastmssql ⚡

A Python library for Microsoft SQL Server built with Rust using the Tiberius driver, PyO3, and bb8 connection pooling.

Language Async Performance

Features

  • High Performance: Exceptional throughput with 17,800+ RPS capability
  • Rust-Powered Backend: Built with Rust for memory safety and reliability
  • No ODBC Required: Direct native SQL Server connection without ODBC drivers
  • Connection Pooling: Intelligent bb8-based connection pooling (default: 75 max, 25 min idle)
  • Async-Only Design: Built on Tokio with clean async/await API
  • Context Managers: Automatic resource management with async with
  • Type Safety: Strong typing with automatic Python type conversion
  • Thread Safety: Support for concurrent operations
  • Cross-Platform: Works on Windows, macOS, and Linux
  • Simple API: Clean, intuitive async-only interface

Performance Highlights

Fastmssql delivers exceptional database performance through Rust-powered architecture:

  • Outstanding Throughput: Up to 17,800+ RPS with multiple connection pattern
  • High Performance: 5,000+ RPS with single connection (default usage)
  • Low Latency: ~2ms average query latency under high load
  • Scalable Architecture: Linear scaling with multiple connection objects
  • Production Ready: Stable API with comprehensive error handling
  • Connection Pooling: Efficient resource management with configurable pools
  • Type Conversion: Automatic conversion between SQL Server and Python types
  • SSL/TLS Support: Secure connections with flexible encryption options

Performance Benchmarks

Pattern RPS Configuration Use Case
Single Connection (Default) 5,000+ Default pool (75/25) Standard applications
Multiple Connections 17,800+ 50 workers, high_throughput() High-concurrency scenarios
Conservative Load 3,500+ Shared connection Traditional pooling

Benchmark Environment:

  • Database: SQL Server (local instance)
  • Query: SELECT 1 (minimal overhead)
  • Test Duration: 15-30 seconds per test
  • Hardware: Modern development machine

Key Performance Insights:

  1. Multiple Connection Objects: Creating separate Connection() objects eliminates serialization bottlenecks
  2. Pool Configuration: Use PoolConfig.high_throughput() for demanding workloads
  3. Optimal Worker Count: 30-50 concurrent workers provides best throughput
  4. Tokio Optimization: Aggressive threading configuration maximizes async performance

Installation

From PyPI (Recommended)

Install fastmssql using pip:

pip install fastmssql

Prerequisites

  • Python 3.8 to 3.13
  • Microsoft SQL Server (any recent version)

From Source (Development)

Ensure you have Docker, Rust, and Python installed. If you want to build from source or contribute to development:

  1. Clone the repository:
git clone <your-repo-url>
cd mssql-python-rust
  1. Run the setup script
./setup.sh

Quick Start

Basic Async Usage (Recommended)

import asyncio
from fastmssql import Connection

async def main():
    # Connect to SQL Server using async context manager
    connection_string = "Server=localhost;Database=master;User Id=myuser;Password=mypass"
    
    # Automatic connection pool management
    async with Connection(connection_string) as conn:
        rows = await conn.execute("SELECT @@VERSION as version")
        for row in rows:
            print(row['version'])
        
        # Pool statistics
        stats = conn.pool_stats()
        print(f"Pool: {stats['active_connections']}/{stats['connections']} connections active")

asyncio.run(main())

Connection Methods

The library supports two ways to connect to SQL Server:

1. Connection String (Traditional)

import asyncio
from fastmssql import Connection

async def main():
    # Traditional connection string approach
    connection_string = "Server=localhost;Database=master;User Id=myuser;Password=mypass"
    
    async with Connection(connection_string=connection_string) as conn:
        result = await conn.execute("SELECT @@VERSION as version")
        for row in result.rows():
            print(row['version'])

asyncio.run(main())

2. Individual Parameters

import asyncio
from fastmssql import Connection

async def main():
    # Using individual connection parameters
    
    # SQL Server Authentication  
    async with Connection(
        server="localhost",
        database="master",
        username="myuser",
        password="mypassword"
    ) as conn:
        result = await conn.execute("SELECT SUSER_NAME() as login")
        for row in result.rows():
            print(f"Logged in as: {row['login']}")

asyncio.run(main())

Performance Patterns

For maximum performance in high-concurrency scenarios, create multiple Connection objects:

import asyncio
from fastmssql import Connection, PoolConfig

async def high_performance_pattern():
    """Optimal pattern for maximum throughput."""
    connection_string = "Server=localhost;Database=master;User Id=myuser;Password=mypass"
    config = PoolConfig.high_throughput()  # Optimized settings
    
    async def worker():
        # Each worker gets its own Connection object for maximum throughput
        async with Connection(connection_string, pool_config=config) as conn:
            for _ in range(1000):
                # Use proper SQL Server parameterization with @param syntax
                result = await conn.execute("SELECT data FROM my_table WHERE id = @id", {"id": 123})
                # Process results...
    
    # Launch multiple workers - each with their own connection
    workers = [asyncio.create_task(worker()) for _ in range(50)]
    await asyncio.gather(*workers)
    
    # This pattern can achieve 17,800+ RPS

asyncio.run(high_performance_pattern())

Key Performance Insight: While a single Connection object provides excellent performance (5,000+ RPS), creating multiple Connection objects eliminates serialization bottlenecks and can achieve 17,800+ RPS for maximum throughput scenarios.

Connection Pool Configuration

Configure the connection pool for your specific needs:

import asyncio
from fastmssql import Connection, PoolConfig

async def main():
    # Custom pool configuration
    pool_config = PoolConfig(
        max_size=20,              # Maximum connections in pool
        min_idle=5,               # Minimum idle connections
        max_lifetime_secs=3600,   # Connection max lifetime (1 hour)
        idle_timeout_secs=600,    # Idle connection timeout (10 min)
        connection_timeout_secs=30 # Max wait time for connection
    )

    async with Connection(connection_string, pool_config) as conn:
        result = await conn.execute("SELECT * FROM users")
        
    # Predefined configurations for different scenarios
    high_throughput_config = PoolConfig.high_throughput()     # 100 connections, optimized for high RPS
    maximum_performance = PoolConfig.maximum_performance()     # 150 connections, optimized for peak load
    low_resource_config = PoolConfig.low_resource()           # 3 connections, minimal resources  
    dev_config = PoolConfig.development()                     # 5 connections, shorter timeouts

    # Default configuration is optimized for high performance
    # Default: max_size=75, min_idle=25 - ready for production workloads
    
    # For maximum throughput, use multiple Connection objects:
    async def high_perf_worker():
        async with Connection(connection_string, maximum_performance) as conn:
            result = await conn.execute("SELECT * FROM fast_table")
            return result.rows()
    
    # Each worker gets its own connection for optimal performance
    tasks = [asyncio.create_task(high_perf_worker()) for _ in range(50)]
    results = await asyncio.gather(*tasks)

asyncio.run(main())

Connection Strings

The library supports standard SQL Server connection string formats:

# SQL Server Authentication
conn_str = "Server=localhost;Database=MyDB;User Id=sa;Password=MyPassword"

# With specific port
conn_str = "Server=localhost,1433;Database=MyDB;User Id=myuser;Password=mypass"

# Azure SQL Database
conn_str = "Server=tcp:myserver.database.windows.net,1433;Database=MyDB;User Id=myuser;Password=mypass;Encrypt=true"

Working with Data

import asyncio
from fastmssql import Connection

async def main():
    async with Connection(connection_string) as conn:
        # Execute queries
        users = await conn.execute("SELECT id, name, email FROM users WHERE active = 1")
        
        # Iterate through results
        for user in users:
            print(f"User {user['id']}: {user['name']} ({user['email']})")
        
        # Execute non-query operations
        rows_affected = await conn.execute_non_query(
            "UPDATE users SET last_login = GETDATE() WHERE id = 123"
        )
        print(f"Updated {rows_affected} rows")
        
        # Work with different data types
        data = await conn.execute("""
            SELECT 
                42 as int_value,
                3.14159 as float_value,
                'Hello World' as string_value,
                GETDATE() as datetime_value,
                CAST(1 as BIT) as bool_value,
                NULL as null_value
        """)
        
        row = data[0]
        for column_name, value in row.items():
            print(f"{column_name}: {value} (type: {type(value).__name__})")

asyncio.run(main())

Usage

Asynchronous Usage with Connection Pooling

Full async/await support with automatic connection pool management:

import asyncio
from fastmssql import Connection

async def main():
    connection_string = "Server=localhost;Database=test;Integrated Security=true"
    
    # Async context manager with automatic pool management
    async with Connection(connection_string) as conn:
        rows = await conn.execute("SELECT name FROM sys.databases")
        for row in rows:
            print(row['name'])
            
        # Pool statistics
        stats = conn.pool_stats()
        print(f"Pool: {stats['active_connections']}/{stats['connections']} connections active")
    
    # High-performance concurrent operations
    async def fetch_user_data(user_id):
        async with Connection(connection_string) as conn:
            return await conn.execute(f"SELECT * FROM users WHERE id = {user_id}")
    
    # Execute multiple queries concurrently using the connection pool
    user_ids = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    tasks = [fetch_user_data(uid) for uid in user_ids]
    results = await asyncio.gather(*tasks)  # bb8 pool handles concurrent connections efficiently
    
    for user_data in results:
        if user_data:
            print(f"User: {user_data[0]['name']}")

asyncio.run(main())

Development

Building from Source

# Install development dependencies
pip install maturin pytest pytest-asyncio black ruff

# Build in development mode
maturin develop

# Run tests
python -m pytest tests/

# Format code
black python/
ruff check python/

Project Structure

mssql-python-rust/
├── src/                    # Rust source code
│   ├── lib.rs             # Main library entry point
│   ├── connection.rs      # Connection handling
│   ├── query.rs           # Query execution
│   └── types.rs           # Type definitions
├── python/                # Python source code
│   ├── __init__.py        # Main Python module
│   ├── mssql.py          # High-level API
│   └── types.py          # Python type definitions
├── examples/              # Usage examples
├── tests/                 # Test files
├── Cargo.toml            # Rust dependencies
├── pyproject.toml        # Python project configuration
└── README.md             # This file

Testing

Run the examples to test your installation:

# Basic functionality
python examples/basic_usage.py

# Advanced features
python examples/advanced_usage.py

API Reference

Core Classes

Connection

Main connection class with bb8 connection pool management.

Constructor:

Connection(connection_string: str, pool_config: Optional[PoolConfig] = None)

Context Manager Support:

# Synchronous
with Connection(conn_str) as conn:
    result = conn.execute("SELECT * FROM table")

# Asynchronous  
async with Connection(conn_str) as conn:
    result = await conn.execute_async("SELECT * FROM table")

Methods:

  • execute(sql: str) -> List[Row] - Execute a query synchronously
  • pool_stats() -> dict - Get connection pool statistics
  • disconnect() - Close the connection pool
  • is_connected() -> bool - Check if pool is active

Pool Statistics:

stats = conn.pool_stats()
# Returns: {
#     'connections': 10,        # Total connections in pool
#     'active_connections': 3,  # Currently active connections  
#     'idle_connections': 7     # Available idle connections
# }

PoolConfig

Configuration class for bb8 connection pool settings.

Constructor:

PoolConfig(
    max_size: int = 10,                    # Maximum connections in pool
    min_idle: int = 0,                     # Minimum idle connections
    max_lifetime_secs: Optional[int] = None,  # Connection max lifetime
    idle_timeout_secs: Optional[int] = None,  # Idle connection timeout
    connection_timeout_secs: int = 30         # Max wait time for connection
)

Predefined Configurations:

# High throughput applications (web servers, APIs)
config = PoolConfig.high_throughput()    # 20 connections, optimized settings

# Low resource environments (embedded, containers)  
config = PoolConfig.low_resource()       # 3 connections, minimal overhead

# Development environments
config = PoolConfig.development()        # 5 connections, shorter timeouts

Row

Represents a database row with column access.

Methods:

  • get(column: str) -> Value - Get value by column name
  • get_by_index(index: int) -> Value - Get value by column index
  • columns() -> List[str] - Get column names
  • values() -> List[Value] - Get all values
  • to_dict() -> dict - Convert to dictionary

Module Functions

Connection Management

# Create connection with default pool settings
connect(connection_string: str) -> Connection

# Create async connection with default pool settings
connect_async(connection_string: str) -> Connection

# One-liner query execution
execute(connection_string: str, sql: str) -> List[dict]
execute_async(connection_string: str, sql: str) -> List[dict]

Utility Functions

version() -> str  # Get library version

Connection Pool Architecture

The library uses the bb8 connection pool for efficient resource management:

  1. Pool Initialization: Creates a pool of reusable connections on first use
  2. Connection Reuse: Automatically reuses idle connections for new requests
  3. Load Balancing: Distributes connections across concurrent operations
  4. Automatic Cleanup: Closes idle connections based on timeout settings
  5. Thread Safety: Safe for use across multiple threads and async tasks

Error Handling

try:
    async with mssql.connect_async(connection_string) as conn:
        result = await conn.execute("SELECT * FROM invalid_table")
except Exception as e:
    print(f"Database error: {e}")
    # Connection automatically returned to pool even on error

Migration to Async-Only Architecture

This library has been upgraded to use async-only operations with the bb8 connection pool for improved performance and reliability.

Async-Only API:

# Async-only with automatic connection pooling
async with mssql.connect_async(conn_str) as conn:
    result = await conn.execute("SELECT * FROM table")
    
    # Pool statistics
    stats = conn.pool_stats()
    print(f"Pool utilization: {stats['active_connections']}/{stats['connections']}")

Advanced Usage Patterns

Custom Pool Configuration for Different Scenarios

from fastmssql import Connection, PoolConfig

# High-load web application
web_config = PoolConfig(
    max_size=50,               # Handle many concurrent requests
    min_idle=10,               # Keep connections ready
    max_lifetime_secs=1800,    # 30 min connection lifetime
    idle_timeout_secs=300,     # 5 min idle timeout
    connection_timeout_secs=10 # Fast timeout for web responses
)

# Batch processing application  
batch_config = PoolConfig(
    max_size=5,                # Fewer connections
    min_idle=2,                # Always keep some ready
    max_lifetime_secs=7200,    # 2 hour lifetime for long operations
    idle_timeout_secs=1800,    # 30 min idle timeout
    connection_timeout_secs=60 # Longer timeout for batch work
)

# Microservice with limited resources
micro_config = PoolConfig(
    max_size=3,                # Minimal connections
    min_idle=1,                # One always ready
    max_lifetime_secs=3600,    # 1 hour lifetime
    idle_timeout_secs=600,     # 10 min idle timeout
    connection_timeout_secs=15 # Quick timeout
)

Monitoring Pool Health

async def monitor_database_pool():
    """Monitor connection pool health and performance"""
    
    async with mssql.connect_async(connection_string) as conn:
        while True:
            stats = conn.pool_stats()
            utilization = stats['active_connections'] / stats['connections'] * 100
            
            print(f"Pool Utilization: {utilization:.1f}%")
            print(f"Active: {stats['active_connections']}, Idle: {stats['idle_connections']}")
            
            # Alert if pool utilization is too high
            if utilization > 90:
                print("WARNING: High pool utilization detected!")
                
            await asyncio.sleep(30)  # Check every 30 seconds

Optimizing for Different Database Workloads

# OLTP (Online Transaction Processing) - Many small, fast queries
oltp_config = PoolConfig.high_throughput()
async def oltp_operations():
    async with mssql.connect_async(conn_str, oltp_config) as conn:
        # Fast, concurrent transactions
        tasks = [
            conn.execute_async("SELECT * FROM users WHERE id = $1", [user_id])
            for user_id in range(1, 101)
        ]
        results = await asyncio.gather(*tasks)

# OLAP (Online Analytical Processing) - Fewer, longer-running queries  
olap_config = PoolConfig.low_resource()
async def olap_operations():
    async with mssql.connect_async(conn_str, olap_config) as conn:
        # Long-running analytical queries
        quarterly_report = await conn.execute_async("""
            SELECT 
                DATE_TRUNC('quarter', order_date) as quarter,
                SUM(total_amount) as total_revenue,
                COUNT(*) as order_count
            FROM orders 
            WHERE order_date >= '2024-01-01'
            GROUP BY DATE_TRUNC('quarter', order_date)
            ORDER BY quarter
        """)
        return quarterly_report

API Reference

Common Issues

  1. Import Error: Make sure you've built the extension with maturin develop
  2. Connection Fails: Check your connection string and SQL Server configuration. Note that Windows authentication is not supported - use SQL Server authentication with username and password.
  3. Build Errors: Ensure you have the Rust toolchain installed
  4. Build Issues: Make sure you have the Microsoft Visual C++ Build Tools on Windows

Contributing

Contributions are welcome! Please open an issue or submit a pull request for any enhancements or bug fixes.

License

This project is licensed under the PolyForm Noncommercial License 1.0.0. See the LICENSE file for details.

Third-Party Attributions

This project includes and depends on third-party libraries licensed under the Apache License 2.0 and MIT License, as well as other open source licenses.

Note: Additional third-party libraries and their license information are listed in licenses/NOTICE.txt.

See the licenses/NOTICE.txt file for full attribution and copyright information. The full text of the Apache License 2.0 is provided in the licenses/APACHE_LICENSE_2.0.txt file. The full text of the MIT License is provided in the licenses/MIT_LICENSE.txt file.

Acknowledgments

  • Tiberius - Rust SQL Server driver (Apache License 2.0)
  • PyO3 - Python bindings for Rust (Apache License 2.0)
  • pyo3-asyncio - Async bridge for PyO3 (Apache License 2.0)
  • pytest - Python testing framework (MIT License)
  • pytest-asyncio - Async test support for pytest (MIT License)
  • black - Python code formatter (MIT License)
  • ruff - Python linter (MIT License)
  • Python and asyncio - Python standard library (Python Software Foundation License)
  • Maturin - Build tool for Python extensions in Rust

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distributions

No source distribution files available for this release.See tutorial on generating distribution archives.

Built Distributions

If you're not sure about the file name format, learn more about wheel file names.

fastmssql-0.2.7-cp312-cp312-win_amd64.whl (1.5 MB view details)

Uploaded CPython 3.12Windows x86-64

fastmssql-0.2.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.8 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ x86-64

fastmssql-0.2.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.8 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.17+ ARM64

fastmssql-0.2.7-cp312-cp312-macosx_11_0_arm64.whl (1.6 MB view details)

Uploaded CPython 3.12macOS 11.0+ ARM64

fastmssql-0.2.7-cp312-cp312-macosx_10_9_x86_64.whl (1.7 MB view details)

Uploaded CPython 3.12macOS 10.9+ x86-64

fastmssql-0.2.7-cp311-cp311-win_amd64.whl (1.5 MB view details)

Uploaded CPython 3.11Windows x86-64

fastmssql-0.2.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.8 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ x86-64

fastmssql-0.2.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.8 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.17+ ARM64

fastmssql-0.2.7-cp311-cp311-macosx_11_0_arm64.whl (1.6 MB view details)

Uploaded CPython 3.11macOS 11.0+ ARM64

fastmssql-0.2.7-cp311-cp311-macosx_10_9_x86_64.whl (1.7 MB view details)

Uploaded CPython 3.11macOS 10.9+ x86-64

fastmssql-0.2.7-cp310-cp310-win_amd64.whl (1.5 MB view details)

Uploaded CPython 3.10Windows x86-64

fastmssql-0.2.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.8 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ x86-64

fastmssql-0.2.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.8 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.17+ ARM64

fastmssql-0.2.7-cp310-cp310-macosx_11_0_arm64.whl (1.6 MB view details)

Uploaded CPython 3.10macOS 11.0+ ARM64

fastmssql-0.2.7-cp310-cp310-macosx_10_9_x86_64.whl (1.7 MB view details)

Uploaded CPython 3.10macOS 10.9+ x86-64

fastmssql-0.2.7-cp39-cp39-win_amd64.whl (1.5 MB view details)

Uploaded CPython 3.9Windows x86-64

fastmssql-0.2.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.8 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ x86-64

fastmssql-0.2.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.8 MB view details)

Uploaded CPython 3.9manylinux: glibc 2.17+ ARM64

fastmssql-0.2.7-cp39-cp39-macosx_11_0_arm64.whl (1.6 MB view details)

Uploaded CPython 3.9macOS 11.0+ ARM64

fastmssql-0.2.7-cp39-cp39-macosx_10_9_x86_64.whl (1.7 MB view details)

Uploaded CPython 3.9macOS 10.9+ x86-64

fastmssql-0.2.7-cp38-cp38-win_amd64.whl (1.5 MB view details)

Uploaded CPython 3.8Windows x86-64

fastmssql-0.2.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (1.8 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ x86-64

fastmssql-0.2.7-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl (1.8 MB view details)

Uploaded CPython 3.8manylinux: glibc 2.17+ ARM64

fastmssql-0.2.7-cp38-cp38-macosx_11_0_arm64.whl (1.6 MB view details)

Uploaded CPython 3.8macOS 11.0+ ARM64

fastmssql-0.2.7-cp38-cp38-macosx_10_9_x86_64.whl (1.7 MB view details)

Uploaded CPython 3.8macOS 10.9+ x86-64

File details

Details for the file fastmssql-0.2.7-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: fastmssql-0.2.7-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 1.5 MB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for fastmssql-0.2.7-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 57fb82d63ac171f78b0c68c350fca5e79c2a6566a27e340b8fc39c8ef7ed752b
MD5 2004f58064e29845d2d326d9a26357db
BLAKE2b-256 95ada08f125778c2a0ee3cc6d498dd2a738bf814e006b915b017d47b63773123

See more details on using hashes here.

File details

Details for the file fastmssql-0.2.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for fastmssql-0.2.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 12f2fc3b9e1144dff9ff791da215892dc11b23b8ecdfcb046190c86ce21f7188
MD5 4ce6f2e8ddbeff48fd2272120e986fe1
BLAKE2b-256 6721d448588a71f8de9f01bd5ea2ecccbbac24473abe8cc5c862acf0c029ca61

See more details on using hashes here.

File details

Details for the file fastmssql-0.2.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for fastmssql-0.2.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 a6bc322e4c1f9de1e9e242bf94687202c0c9cd5e1b210b9326674b16e945526b
MD5 e444fa9e8fb772e253dd07e693085652
BLAKE2b-256 86f852cb5f380096cde8461df2b4c9c714092d53c1d403ce90b684847a950a3f

See more details on using hashes here.

File details

Details for the file fastmssql-0.2.7-cp312-cp312-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for fastmssql-0.2.7-cp312-cp312-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 a24cef4542231c507f7e0326b4a67617e32a4e2b40e95e87adc1612cb210898e
MD5 11a2cd16f1c2d67ad443f12dd35da0f5
BLAKE2b-256 9791406511fbd0798977da4e66d6217d1d096d1aafd609ec352f26616d950dee

See more details on using hashes here.

File details

Details for the file fastmssql-0.2.7-cp312-cp312-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for fastmssql-0.2.7-cp312-cp312-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 8ee20352617189cb2f4331645233d57e43410e54b5d26d39fe1fd9186a163640
MD5 a7d066cffc7ef8520396f9a9b7532ab0
BLAKE2b-256 8ee8098336edcc284429994848365ff5b3f146e0beee6c9875e8f2545218962a

See more details on using hashes here.

File details

Details for the file fastmssql-0.2.7-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: fastmssql-0.2.7-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 1.5 MB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for fastmssql-0.2.7-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 732a322801d1c39af66060d9066389be82c39589c97889d30ce4fbe0b8332b98
MD5 f51ec1a45656c533dd6d56c7b25ee3a4
BLAKE2b-256 27aa6be9664fc9a406570093fe4a13d0eb86be9e789b961bb30d9982affe9392

See more details on using hashes here.

File details

Details for the file fastmssql-0.2.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for fastmssql-0.2.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 4826f773a56edc8cd485bb8fee87e66eac7174f4eda8d144821abaf608597d21
MD5 5888dc481239142e69b7dbbb053e7917
BLAKE2b-256 40ca68a4ef6ce1b42cfa2e0c85322e66221ae2497bd6ed7db60371d1fae3daf6

See more details on using hashes here.

File details

Details for the file fastmssql-0.2.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for fastmssql-0.2.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 63e27b0feede2dedc14cd77c227c5ec2f98b996cc4853422234379f63f3bbc58
MD5 c9d9ac092169156814ad6b9fbbd77aba
BLAKE2b-256 e36121ba3cfcb9d4b97ad0a5f21dd2049a846a2eb32c0d394161c51b5227969e

See more details on using hashes here.

File details

Details for the file fastmssql-0.2.7-cp311-cp311-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for fastmssql-0.2.7-cp311-cp311-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 1b24237603342a5daaa97f5bf40714fcf7ac0233f54e1324a10f2b3395c79b18
MD5 1de2817d822767a31e85e4d0b961a236
BLAKE2b-256 475bf58a6fde199b181be976a6aca4da75b633b9c47d86c8f53b712386d7fae8

See more details on using hashes here.

File details

Details for the file fastmssql-0.2.7-cp311-cp311-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for fastmssql-0.2.7-cp311-cp311-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 755c913d73473af349030e52ef2ece9ac85dd21e82b644d474fa3971f1883e4e
MD5 11de2956b81f177a27512bb9e0919162
BLAKE2b-256 c6311d6d5eec01e59aea8a0cf3137856ec341d65f49188a8d6e241a82ceab0bf

See more details on using hashes here.

File details

Details for the file fastmssql-0.2.7-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: fastmssql-0.2.7-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 1.5 MB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for fastmssql-0.2.7-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 78d6bae1e700f1af8f1a464b79ceaa98b7c5486481755248e39cbc8a93fbcb38
MD5 028e94833058721dfd1d51e3f60e4da4
BLAKE2b-256 e3b3c2582e0e651e29177551f40b5aa8e33c08d395284705bb33a7f3dcad32de

See more details on using hashes here.

File details

Details for the file fastmssql-0.2.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for fastmssql-0.2.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 2d2f214c5d9da43d69c0f81fd898147c5be488d2615e43cc5fc030212ccaae1f
MD5 6f3342d59a22815e9dfe0a2d1324104f
BLAKE2b-256 30d0a27e6279ea8fa084e11c4bc3e082fc1be1d5fbb6b20c2b20d7abccb40213

See more details on using hashes here.

File details

Details for the file fastmssql-0.2.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for fastmssql-0.2.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 0fa231bb5385e0c453f482486b0f2328192bdfde09e21c56e0422ada59bcd874
MD5 c37543f99e19a945021268480917bba6
BLAKE2b-256 2efdd8ce86d935937f1bc43e0d3bc9adb4bb023aca02d5e7364e2a3983d0049c

See more details on using hashes here.

File details

Details for the file fastmssql-0.2.7-cp310-cp310-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for fastmssql-0.2.7-cp310-cp310-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 f68132e51fd7c7cb0112a05502b054e2f6b112d149a612829952bc96138abfc9
MD5 786f631a44ac8ec37c041daa80f3e913
BLAKE2b-256 c59ab9b9b3465d2696456e489978e195e72650610dc45728466d970ab45934ee

See more details on using hashes here.

File details

Details for the file fastmssql-0.2.7-cp310-cp310-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for fastmssql-0.2.7-cp310-cp310-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 8ec6ad04689f2e4a769e0a9f625306ebf8b95e1d34c10d93c01fb153b79f7367
MD5 b980ae1289a9e63b64e9a36fa0374d54
BLAKE2b-256 aca8935944cc3728bf9330ef9c9d425aaf1b9cf5c66528e4382e7a2dad38ada7

See more details on using hashes here.

File details

Details for the file fastmssql-0.2.7-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: fastmssql-0.2.7-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 1.5 MB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for fastmssql-0.2.7-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 8549b46f68c346dd4a3fda39b92c7e1ee43934faad597c05e0b77b48d578534f
MD5 84821eb6c03d5f62fc7f311f2933087c
BLAKE2b-256 ca1073686f5a8b8be31e1c794183b05b486d0754c17ddf55be975bbf869352a1

See more details on using hashes here.

File details

Details for the file fastmssql-0.2.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for fastmssql-0.2.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 17a805fece9c97c76aa7e6323026a971687bdbd816f235b5d5f832de7d76647e
MD5 b2752992940fcb3937802b1dbd16ab7b
BLAKE2b-256 47af994a35e3ae05600205a2e1d0b4e3af1db4903321f648de0a9dbd2627ac84

See more details on using hashes here.

File details

Details for the file fastmssql-0.2.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for fastmssql-0.2.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 ff37e0d34d0e1c156e5c478a33e999b46a02af9119f9e6c00fc4b35d5c7c09d7
MD5 cd19e174c7be93de38196553fce9138e
BLAKE2b-256 b92e50598055114d6f42fe0c7dc61e75550591101e67495e49fee5285bc3a974

See more details on using hashes here.

File details

Details for the file fastmssql-0.2.7-cp39-cp39-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for fastmssql-0.2.7-cp39-cp39-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 d03cff1584e30daf57605ca629551182c613b67f178704565903f5614b675bfd
MD5 7b9f234625c6be1c63be4eece0af4d84
BLAKE2b-256 543dfd57d60e86b6e0f722c794828d1bcf152693f45021c6b1691cd1b1e497ae

See more details on using hashes here.

File details

Details for the file fastmssql-0.2.7-cp39-cp39-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for fastmssql-0.2.7-cp39-cp39-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 1520fc910ca4874533065907b50bf3d66ef51cc89725500df8f3434bc47a8943
MD5 2249e9b265b08d39baa4d0f1348d30ae
BLAKE2b-256 f9b8e5b9966d918a545549a8ff20c1c77b7a3d2092ea02844149bc4acb72f468

See more details on using hashes here.

File details

Details for the file fastmssql-0.2.7-cp38-cp38-win_amd64.whl.

File metadata

  • Download URL: fastmssql-0.2.7-cp38-cp38-win_amd64.whl
  • Upload date:
  • Size: 1.5 MB
  • Tags: CPython 3.8, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.12.9

File hashes

Hashes for fastmssql-0.2.7-cp38-cp38-win_amd64.whl
Algorithm Hash digest
SHA256 108512757101b8ac6737ce5d4d5f76bef7b6223cafb2f1e5f84448c4efcd6edd
MD5 0cb2f185f179b3dca1b17bb86c9f77a2
BLAKE2b-256 c56d90b943ac910254047b70f9b9700beaad0bbba1ce576c0dbe6975efcb3d56

See more details on using hashes here.

File details

Details for the file fastmssql-0.2.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.

File metadata

File hashes

Hashes for fastmssql-0.2.7-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
Algorithm Hash digest
SHA256 19facc43f686eb82a75d8af255b32a659c7eaf481b9f4fef2fb9f24452df924b
MD5 552bbd3615f3e6c83e3bfdccfeb55754
BLAKE2b-256 e401c0ef1cac6f9f4a126809f7cf7850565091317011a57c7d8301c0829068e7

See more details on using hashes here.

File details

Details for the file fastmssql-0.2.7-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.

File metadata

File hashes

Hashes for fastmssql-0.2.7-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
Algorithm Hash digest
SHA256 dc217f13f922306ca6a99b279545590f2e162b2deb1664d01da4234867ef74b6
MD5 3b8013495bee28166297a0727db8baa0
BLAKE2b-256 72e0c49a307c57af069007e2b4b621454473c7bed2679c831679f70335f49938

See more details on using hashes here.

File details

Details for the file fastmssql-0.2.7-cp38-cp38-macosx_11_0_arm64.whl.

File metadata

File hashes

Hashes for fastmssql-0.2.7-cp38-cp38-macosx_11_0_arm64.whl
Algorithm Hash digest
SHA256 72a8e9ddfbbd0b4af24a539e29084e15a1c0366eaad9e2d0611454eb56ff8a3f
MD5 221efaa2e87bdbcb0ac4cfd304765ffe
BLAKE2b-256 5604628c05a9e715b0e68a64940519cb9102b1bf20fc3690e14716dc0488145c

See more details on using hashes here.

File details

Details for the file fastmssql-0.2.7-cp38-cp38-macosx_10_9_x86_64.whl.

File metadata

File hashes

Hashes for fastmssql-0.2.7-cp38-cp38-macosx_10_9_x86_64.whl
Algorithm Hash digest
SHA256 538b9ad6bc4241457e3ec2b7bd78e9156c9e9a648c39e1e9f9b5f859982be61e
MD5 1a0d4c4c6df4f98c696e23b1bac54926
BLAKE2b-256 839e015843497f987d1ec8322e35f92dd48f235ca86f264f46458fcae2dca35e

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page