Skip to main content

A high-performance async Python library for Microsoft SQL Server built on Rust for heavy workloads and low latency.

Project description

FastMSSQL ⚡

FastMSSQL is an async Python library for Microsoft SQL Server (MSSQL), built in Rust. Unlike standard libaries, it uses a native SQL Server client—no ODBC required—simplifying installation on Windows, macOS, and Linux. Great for data ingestion, bulk inserts, and large-scale query workloads.

Python Versions

License

Unit Tests

Latest Release

Platform

Rust Backend

Features

  • High performance: optimized for very high RPS and low overhead
  • Rust core: memory‑safe and reliable, tuned Tokio runtime
  • No ODBC: native SQL Server client, no external drivers needed
  • Azure authentication: Service Principal, Managed Identity, and access token support (BETA)
  • Connection pooling: bb8‑based, smart defaults (default max_size=20, min_idle=2)
  • Async first: clean async/await API with async with context managers
  • Strong typing: fast conversions for common SQL Server types
  • Thread‑safe: safe to use in concurrent apps
  • Cross‑platform: Windows, macOS, Linux
  • Batch operations: high-performance bulk inserts and batch query execution

Installation

From PyPI (recommended)

pip install fastmssql

Prerequisites

  • Python 3.10 to 3.14
  • Microsoft SQL Server (any recent version)

Quick start

Basic async usage

import asyncio
from fastmssql import Connection

async def main():
    conn_str = "Server=localhost;Database=master;User Id=myuser;Password=mypass"
    async with Connection(conn_str) as conn:
        # SELECT: use query() -> rows()
        result = await conn.query("SELECT @@VERSION as version")
        for row in result.rows():
            print(row['version'])

        # Pool statistics (tuple: connected, connections, idle, max_size, min_idle)
        connected, connections, idle, max_size, min_idle = await conn.pool_stats()
        print(f"Pool: connected={connected}, size={connections}/{max_size}, idle={idle}, min_idle={min_idle}")

asyncio.run(main())

Explicit Connection Management

When not utilizing Python's context manager (async with), FastMssql uses lazy connection initialization: if you call query() or execute() on a new Connection, the underlying pool is created if not already present.

For more control, you can explicitly connect and disconnect:

import asyncio
from fastmssql import Connection

async def main():
    conn_str = "Server=localhost;Database=master;User Id=myuser;Password=mypass"
    conn = Connection(conn_str)

    # Explicitly connect
    await conn.connect()
    assert await conn.is_connected()

    # Run queries
    result = await conn.query("SELECT 42 as answer")
    print(result.rows()[0]["answer"])  # -> 42

    # Explicitly disconnect
    await conn.disconnect()
    assert not await conn.is_connected()

asyncio.run(main())

Usage

Connection options

You can connect either with a connection string or individual parameters.

  1. Connection string
import asyncio
from fastmssql import Connection

async def main():
    conn_str = "Server=localhost;Database=master;User Id=myuser;Password=mypass"
    async with Connection(connection_string=conn_str) as conn:
        rows = (await conn.query("SELECT DB_NAME() as db")).rows()
        print(rows[0]['db'])

asyncio.run(main())
  1. Individual parameters
import asyncio
from fastmssql import Connection

async def main():
    async with Connection(
        server="localhost",
        database="master",
        username="myuser",
        password="mypassword"
    ) as conn:
        rows = (await conn.query("SELECT SUSER_SID() as sid")).rows()
        print(rows[0]['sid'])

asyncio.run(main())

Note: Windows authentication (Trusted Connection) is currently not supported. Use SQL authentication (username/password).

Azure Authentication (BETA)

🧪 This is a beta feature. Azure authentication functionality is experimental and may change in future versions.

FastMSSSQL supports Azure Active Directory (AAD) authentication for Azure SQL Database and Azure SQL Managed Instance. You can authenticate using Service Principals, Managed Identity, or access tokens.

Service Principal Authentication

import asyncio
from fastmssql import Connection, AzureCredential

async def main():
    # Create Azure credential using Service Principal
    azure_cred = AzureCredential.service_principal(
        client_id="your-client-id",
        client_secret="your-client-secret", 
        tenant_id="your-tenant-id"
    )
    
    async with Connection(
        server="yourserver.database.windows.net",
        database="yourdatabase",
        azure_credential=azure_cred
    ) as conn:
        result = await conn.query("SELECT GETDATE() as current_time")
        for row in result.rows():
            print(f"Connected! Current time: {row['current_time']}")

asyncio.run(main())

Managed Identity Authentication

For Azure resources (VMs, Function Apps, App Service, etc.):

import asyncio
from fastmssql import Connection, AzureCredential

async def main():
    # System-assigned managed identity
    azure_cred = AzureCredential.managed_identity()
    
    # Or user-assigned managed identity
    # azure_cred = AzureCredential.managed_identity(client_id="user-assigned-identity-client-id")
    
    async with Connection(
        server="yourserver.database.windows.net",
        database="yourdatabase",
        azure_credential=azure_cred
    ) as conn:
        result = await conn.query("SELECT USER_NAME() as user_name")
        for row in result.rows():
            print(f"Connected as: {row['user_name']}")

asyncio.run(main())

Access Token Authentication

If you already have an access token from another Azure service:

import asyncio
from fastmssql import Connection, AzureCredential

async def main():
    # Use a pre-obtained access token
    access_token = "your-access-token"
    azure_cred = AzureCredential.access_token(access_token)
    
    async with Connection(
        server="yourserver.database.windows.net",
        database="yourdatabase",
        azure_credential=azure_cred
    ) as conn:
        result = await conn.query("SELECT 1 as test")
        print("Connected with access token!")

asyncio.run(main())

Default Azure Credential

Uses the Azure credential chain (environment variables → managed identity → Azure CLI → Azure PowerShell):

import asyncio
from fastmssql import Connection, AzureCredential

async def main():
    # Use default Azure credential chain
    azure_cred = AzureCredential.default()
    
    async with Connection(
        server="yourserver.database.windows.net",
        database="yourdatabase",
        azure_credential=azure_cred
    ) as conn:
        result = await conn.query("SELECT 1 as test")
        print("Connected with default credentials!")

asyncio.run(main())

Prerequisites for Azure Authentication:

  • Azure SQL Database or Azure SQL Managed Instance
  • Service Principal with appropriate SQL Database permissions
  • For Managed Identity: Azure resource with managed identity enabled
  • For Default credential: Azure CLI installed and authenticated (az login)

See examples/azure_auth_example.py for comprehensive usage examples.

Working with data

import asyncio
from fastmssql import Connection

async def main():
    async with Connection("Server=.;Database=MyDB;User Id=sa;Password=StrongPwd;") as conn:
        # SELECT (returns rows)
        users = (await conn.query(
            "SELECT id, name, email FROM users WHERE active = 1"
        )).rows()
        for u in users:
            print(f"User {u['id']}: {u['name']} ({u['email']})")

        # INSERT / UPDATE / DELETE (returns affected row count)
        inserted = await conn.execute(
            "INSERT INTO users (name, email) VALUES (@P1, @P2)",
            ["Jane", "jane@example.com"],
        )
        print(f"Inserted {inserted} row(s)")

        updated = await conn.execute(
            "UPDATE users SET last_login = GETDATE() WHERE id = @P1",
            [123],
        )
        print(f"Updated {updated} row(s)")

asyncio.run(main())

Parameters use positional placeholders: @P1, @P2, ... Provide values as a list in the same order.

Batch operations

For high-throughput scenarios, use batch methods to reduce network round-trips:

import asyncio
from fastmssql import Connection

async def main_fetching():
    # Replace with your actual connection string
    async with Connection("Server=.;Database=MyDB;User Id=sa;Password=StrongPwd;") as conn:

        # --- 1. Prepare Data for Demonstration ---
        columns = ["name", "email", "age"]
        data_rows = [
            ["Alice Johnson", "alice@example.com", 28],
            ["Bob Smith", "bob@example.com", 32],
            ["Carol Davis", "carol@example.com", 25],
            ["David Lee", "david@example.com", 35],
            ["Eva Green", "eva@example.com", 29]
        ]
        await conn.bulk_insert("users", columns, data_rows)

        # --- 2. Execute Query and Retrieve the Result Object ---
        print("\n--- Result Object Fetching (fetchone, fetchmany, fetchall) ---")

        # The Result object is returned after the awaitable query executes.
        result = await conn.query("SELECT name, age FROM users ORDER BY age DESC")

        # fetchone(): Retrieves the next single row synchronously.
        oldest_user = result.fetchone()
        if oldest_user:
            print(f"1. fetchone: Oldest user is {oldest_user['name']} (Age: {oldest_user['age']})")

        # fetchmany(2): Retrieves the next set of rows synchronously.
        next_two_users = result.fetchmany(2)
        print(f"2. fetchmany: Retrieved {len(next_two_users)} users: {[r['name'] for r in next_two_users]}.")

        # fetchall(): Retrieves all remaining rows synchronously.
        remaining_users = result.fetchall()
        print(f"3. fetchall: Retrieved all {len(remaining_users)} remaining users: {[r['name'] for r in remaining_users]}.")

        # Exhaustion Check: Subsequent calls return None/[]
        print(f"4. Exhaustion Check (fetchone): {result.fetchone()}")
        print(f"5. Exhaustion Check (fetchmany): {result.fetchmany(1)}")

        # --- 3. Batch Commands for multiple operations ---
        print("\n--- Batch Commands (execute_batch) ---")
        commands = [
            ("UPDATE users SET last_login = GETDATE() WHERE name = @P1", ["Alice Johnson"]),
            ("INSERT INTO user_logs (action, user_name) VALUES (@P1, @P2)", ["login", "Alice Johnson"])
        ]

        affected_counts = await conn.execute_batch(commands)
        print(f"Updated {affected_counts[0]} users, inserted {affected_counts[1]} logs")

asyncio.run(main_fetching())

Connection pooling

Tune the pool to fit your workload. Constructor signature:

from fastmssql import PoolConfig

config = PoolConfig(
    max_size=20,              # max connections in pool
    min_idle=5,               # keep at least this many idle
    max_lifetime_secs=3600,   # recycle connections after 1h
    idle_timeout_secs=600,    # close idle connections after 10m
    connection_timeout_secs=30
)

Presets:

one   = PoolConfig.one()                     # max_size=1,  min_idle=1  (single connection)
low   = PoolConfig.low_resource()            # max_size=3,  min_idle=1  (constrained environments)
dev   = PoolConfig.development()             # max_size=5,  min_idle=1  (local development)
high  = PoolConfig.high_throughput()         # max_size=25, min_idle=8  (high-throughput workloads)
maxp  = PoolConfig.performance()             # max_size=30, min_idle=10 (maximum performance)

# ✨ RECOMMENDED: Adaptive pool sizing based on your concurrency
adapt = PoolConfig.adaptive(20)              # Dynamically sized for 20 concurrent workers
                                             # Formula: max_size = ceil(workers * 1.2) + 5

⚡ Performance Tip: Use PoolConfig.adaptive(n) where n is your expected concurrent workers/tasks. This prevents connection pool lock contention that can degrade performance with oversized pools.

Apply to a connection:

# Recommended: adaptive sizing
async with Connection(conn_str, pool_config=PoolConfig.adaptive(20)) as conn:
    rows = (await conn.query("SELECT 1 AS ok")).rows()

# Or use presets
async with Connection(conn_str, pool_config=high) as conn:
    rows = (await conn.query("SELECT 1 AS ok")).rows()

Default pool (if omitted): max_size=15, min_idle=3.

Transactions

For workloads that require SQL Server transactions with guaranteed connection isolation, use the Transaction class. Unlike Connection (which uses connection pooling), Transaction maintains a dedicated, non-pooled connection for the lifetime of the transaction. This ensures all operations within the transaction run on the same connection, preventing connection-switching issues.

Automatic transaction control (recommended)

Use the context manager for automatic BEGIN, COMMIT, and ROLLBACK:

import asyncio
from fastmssql import Transaction

async def main():
    conn_str = "Server=localhost;Database=master;User Id=myuser;Password=mypass"
    
    async with Transaction(conn_str) as transaction:
        # Automatically calls BEGIN
        await transaction.execute(
            "INSERT INTO orders (customer_id, total) VALUES (@P1, @P2)",
            [123, 99.99]
        )
        await transaction.execute(
            "INSERT INTO order_items (order_id, product_id, qty) VALUES (@P1, @P2, @P3)",
            [1, 456, 2]
        )
        # Automatically calls COMMIT on successful exit
        # or ROLLBACK if an exception occurs

asyncio.run(main())

Manual transaction control

For more control, explicitly call begin(), commit(), and rollback():

import asyncio
from fastmssql import Transaction

async def main():
    conn_str = "Server=localhost;Database=master;User Id=myuser;Password=mypass"
    transaction = Transaction(conn_str)
    
    try:
        await transaction.begin()
        
        result = await transaction.query("SELECT @@VERSION as version")
        print(result.rows()[0]['version'])
        
        await transaction.execute("UPDATE accounts SET balance = balance - @P1 WHERE id = @P2", [50, 1])
        await transaction.execute("UPDATE accounts SET balance = balance + @P1 WHERE id = @P2", [50, 2])
        
        await transaction.commit()
    except Exception as e:
        await transaction.rollback()
        raise
    finally:
        await transaction.close()

asyncio.run(main())

Key differences: Transaction vs Connection

Feature Transaction Connection
Connection Dedicated, non-pooled Pooled (bb8)
Use case SQL transactions, ACID operations General queries, connection reuse
Isolation Single connection per instance Connection may vary per operation
Pooling None (direct TcpStream) Configurable pool settings
Lifecycle Held until .close() or context exit Released to pool after each operation

Choose Transaction when you need guaranteed transaction isolation; use Connection for typical queries and high-concurrency workloads with connection pooling.

SSL/TLS

For Required and LoginOnly encryption, you must specify how to validate the server certificate:

Option 1: Trust Server Certificate (development/self-signed certs):

from fastmssql import SslConfig, EncryptionLevel, Connection

ssl = SslConfig(
    encryption_level=EncryptionLevel.Required,
    trust_server_certificate=True
)

async with Connection(conn_str, ssl_config=ssl) as conn:
    ...

Option 2: Custom CA Certificate (production):

from fastmssql import SslConfig, EncryptionLevel, Connection

ssl = SslConfig(
    encryption_level=EncryptionLevel.Required,
    ca_certificate_path="/path/to/ca-cert.pem"
)

async with Connection(conn_str, ssl_config=ssl) as conn:
    ...

Note: trust_server_certificate and ca_certificate_path are mutually exclusive.

Helpers:

  • SslConfig.development() – encrypt, trust all (dev only)
  • SslConfig.with_ca_certificate(path) – use custom CA
  • SslConfig.login_only() / SslConfig.disabled() – legacy modes
  • SslConfig.disabled() – no encryption (not recommended)

Performance tips

1. Use adaptive pool sizing for optimal concurrency

Match your pool size to actual concurrency to avoid connection pool lock contention:

import asyncio
from fastmssql import Connection, PoolConfig

async def worker(conn_str, cfg):
    async with Connection(conn_str, pool_config=cfg) as conn:
        for _ in range(1000):
            result = await conn.query("SELECT 1 as v")
            # ✅ Good: Lazy iteration (minimal GIL hold per row)
            for row in result:
                process(row)

async def main():
    conn_str = "Server=.;Database=master;User Id=sa;Password=StrongPwd;"
    num_workers = 32
    
    # ✅ Adaptive sizing prevents pool contention
    cfg = PoolConfig.adaptive(num_workers)  # → max_size=43 for 32 workers
    
    await asyncio.gather(*[worker(conn_str, cfg) for _ in range(num_workers)])

asyncio.run(main())

2. Use iteration for large result sets (not .rows())

result = await conn.query("SELECT * FROM large_table")

# ✅ Good: Lazy conversion, one row at a time (minimal GIL contention)
for row in result:
    process(row)

# ❌ Bad: Eager conversion, all rows at once (GIL bottleneck)
all_rows = result.rows()  # or result.fetchall()

Lazy iteration distributes GIL acquisition across rows, dramatically improving performance with multiple Python workers.

Examples & benchmarks

  • Examples: examples/comprehensive_example.py
  • Benchmarks: benchmarks/

Troubleshooting

  • Import/build: ensure Rust toolchain and maturin are installed if building from source
  • Connection: verify connection string; Windows auth not supported
  • Timeouts: increase pool size or tune connection_timeout_secs
  • Parameters: use @P1, @P2, ... and pass a list of values

Contributing

Contributions are welcome. Please open an issue or PR.

License

FastMSSQL is licensed under MIT:

See the LICENSE file for details.

Third‑party attributions

Built on excellent open source projects: Tiberius, PyO3, pyo3‑asyncio, bb8, tokio, serde, pytest, maturin, and more. See licenses/NOTICE.txt for the full list. The full texts of Apache‑2.0 and MIT are in licenses/.

Memory Performance Benchmarks

FastMSSQL is highly memory-efficient with excellent performance characteristics across various workloads:

Test Scenario Memory Usage Performance Notes
Connection Creation 4.83 MB 0.02s Parallel pool warmup, 3 connections
Sequential Queries (100) 0.83 MB 0.01s 8.48 KB per query
Large Result Sets (15K rows) 13.39 MB 0.08s ~0.89 KB per row with GUIDs, timestamps, strings
Concurrent Operations (200) 2.48 MB 0.02s 12.72 KB per operation, 20 concurrent workers
Memory Leak Test (1,000 ops) 0.44 MB 0.02s 0.448 KB per operation - no leaks detected
Batch Operations (250) 0.31 MB 0.01s 1.28 KB per batch operation

Total for all tests: 22.28 MB | 0.16s

Key Performance Characteristics

  • Memory efficiency: ~0.89 KB per row for complex SQL Server data (GUIDs, timestamps, variable-length strings)
  • Lazy conversion: Rows converted on-demand with caching for reset/re-iteration
  • SmallVec optimization: Stack-allocated parameters (0-16) avoid heap allocations
  • Arc-based column sharing: Column metadata shared across all rows in result set
  • Zero-copy operations: Direct Rust-to-Python conversion where possible
  • Connection pool: bb8-based pooling with adaptive sizing to prevent contention

Benchmarks run on: macOS ARM64, Python 3.13, Rust 1.x (release build)
Test environment: Local SQL Server with realistic data types and concurrency

Acknowledgments

Thanks to the maintainers of Tiberius, bb8, PyO3, Tokio, pytest, maturin, and the broader open source community.

Project details


Download files

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

Source Distribution

fastmssql-0.6.0.tar.gz (259.1 kB view details)

Uploaded Source

Built Distributions

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

fastmssql-0.6.0-cp314-cp314t-win_amd64.whl (2.7 MB view details)

Uploaded CPython 3.14tWindows x86-64

fastmssql-0.6.0-cp314-cp314t-musllinux_1_2_x86_64.whl (3.2 MB view details)

Uploaded CPython 3.14tmusllinux: musl 1.2+ x86-64

fastmssql-0.6.0-cp314-cp314t-manylinux_2_28_x86_64.whl (3.1 MB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.28+ x86-64

fastmssql-0.6.0-cp314-cp314t-macosx_10_15_universal2.whl (5.8 MB view details)

Uploaded CPython 3.14tmacOS 10.15+ universal2 (ARM64, x86-64)

fastmssql-0.6.0-cp313-cp313t-win_amd64.whl (2.7 MB view details)

Uploaded CPython 3.13tWindows x86-64

fastmssql-0.6.0-cp313-cp313t-musllinux_1_2_x86_64.whl (3.2 MB view details)

Uploaded CPython 3.13tmusllinux: musl 1.2+ x86-64

fastmssql-0.6.0-cp313-cp313t-manylinux_2_28_x86_64.whl (3.1 MB view details)

Uploaded CPython 3.13tmanylinux: glibc 2.28+ x86-64

fastmssql-0.6.0-cp313-cp313t-macosx_10_15_universal2.whl (5.8 MB view details)

Uploaded CPython 3.13tmacOS 10.15+ universal2 (ARM64, x86-64)

fastmssql-0.6.0-cp310-abi3-win_amd64.whl (2.7 MB view details)

Uploaded CPython 3.10+Windows x86-64

fastmssql-0.6.0-cp310-abi3-musllinux_1_2_x86_64.whl (3.2 MB view details)

Uploaded CPython 3.10+musllinux: musl 1.2+ x86-64

fastmssql-0.6.0-cp310-abi3-manylinux_2_28_x86_64.whl (3.1 MB view details)

Uploaded CPython 3.10+manylinux: glibc 2.28+ x86-64

fastmssql-0.6.0-cp310-abi3-macosx_10_15_universal2.whl (5.8 MB view details)

Uploaded CPython 3.10+macOS 10.15+ universal2 (ARM64, x86-64)

File details

Details for the file fastmssql-0.6.0.tar.gz.

File metadata

  • Download URL: fastmssql-0.6.0.tar.gz
  • Upload date:
  • Size: 259.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.9.26 {"installer":{"name":"uv","version":"0.9.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for fastmssql-0.6.0.tar.gz
Algorithm Hash digest
SHA256 0b8d800bce4375fadb8e1c9e3d7e9cfbff63bcb5375718dc6f9d632782482b1a
MD5 d2bc59d55f87ad485b46f78911674320
BLAKE2b-256 943efd173b6842af20f24ddf72e42d8ad5f338288d8b47def233d016f193bb84

See more details on using hashes here.

File details

Details for the file fastmssql-0.6.0-cp314-cp314t-win_amd64.whl.

File metadata

  • Download URL: fastmssql-0.6.0-cp314-cp314t-win_amd64.whl
  • Upload date:
  • Size: 2.7 MB
  • Tags: CPython 3.14t, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.9.26 {"installer":{"name":"uv","version":"0.9.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for fastmssql-0.6.0-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 1adaa308142dc319b19d7d25e2529cbfa8eb43ba16ac36329298adab8ab06874
MD5 4053c7c9479b60ef03c5ea8851da0ee5
BLAKE2b-256 5236c08eb810b9ccb8a99508491fc127257b36d0dceb45588df8f563128ec1a5

See more details on using hashes here.

File details

Details for the file fastmssql-0.6.0-cp314-cp314t-musllinux_1_2_x86_64.whl.

File metadata

  • Download URL: fastmssql-0.6.0-cp314-cp314t-musllinux_1_2_x86_64.whl
  • Upload date:
  • Size: 3.2 MB
  • Tags: CPython 3.14t, musllinux: musl 1.2+ x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.9.26 {"installer":{"name":"uv","version":"0.9.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for fastmssql-0.6.0-cp314-cp314t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 2cb13b8970d0f60d5589bb23bff00385de5619977e39a7e05b3532bfedf5578f
MD5 b610b78b835b4a5d1b83842fae34d356
BLAKE2b-256 52954219b764b5274b5f1fc0309bfc9abca763a2a8ee313504a0c9bae0a75625

See more details on using hashes here.

File details

Details for the file fastmssql-0.6.0-cp314-cp314t-manylinux_2_28_x86_64.whl.

File metadata

  • Download URL: fastmssql-0.6.0-cp314-cp314t-manylinux_2_28_x86_64.whl
  • Upload date:
  • Size: 3.1 MB
  • Tags: CPython 3.14t, manylinux: glibc 2.28+ x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.9.26 {"installer":{"name":"uv","version":"0.9.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for fastmssql-0.6.0-cp314-cp314t-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 8fa22d8d1ce70dd546df9ed106fd2ae150d5a3be598a1c17bc53fa9a35c559fa
MD5 486af0be804450484cc90fd09fd0765b
BLAKE2b-256 57007d1fac207e1439c63e71f0e835e845aead58a921e9671c6fe714c948c9a7

See more details on using hashes here.

File details

Details for the file fastmssql-0.6.0-cp314-cp314t-macosx_10_15_universal2.whl.

File metadata

  • Download URL: fastmssql-0.6.0-cp314-cp314t-macosx_10_15_universal2.whl
  • Upload date:
  • Size: 5.8 MB
  • Tags: CPython 3.14t, macOS 10.15+ universal2 (ARM64, x86-64)
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.9.26 {"installer":{"name":"uv","version":"0.9.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for fastmssql-0.6.0-cp314-cp314t-macosx_10_15_universal2.whl
Algorithm Hash digest
SHA256 6694cb1f5d852c31b41f740b2e4531158c9cbc3fabeee94c3c1458d0c2c5c63b
MD5 34e41f64dc1172856ce0faff9d5643bd
BLAKE2b-256 31443790de3db1b212da26cd581c6cfd2e39bf222239730a04420032340f96e0

See more details on using hashes here.

File details

Details for the file fastmssql-0.6.0-cp313-cp313t-win_amd64.whl.

File metadata

  • Download URL: fastmssql-0.6.0-cp313-cp313t-win_amd64.whl
  • Upload date:
  • Size: 2.7 MB
  • Tags: CPython 3.13t, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.9.26 {"installer":{"name":"uv","version":"0.9.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for fastmssql-0.6.0-cp313-cp313t-win_amd64.whl
Algorithm Hash digest
SHA256 c8d74fe8b85e675a34e9ec85247a61c0a7c0d865ede5d61240228fe07ef44cc9
MD5 42995e15db418f9b8dd347e5155908e4
BLAKE2b-256 a2211a8613a3b4f0c2571febec112cacc1ae69275f543d23a3d954922dd753d0

See more details on using hashes here.

File details

Details for the file fastmssql-0.6.0-cp313-cp313t-musllinux_1_2_x86_64.whl.

File metadata

  • Download URL: fastmssql-0.6.0-cp313-cp313t-musllinux_1_2_x86_64.whl
  • Upload date:
  • Size: 3.2 MB
  • Tags: CPython 3.13t, musllinux: musl 1.2+ x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.9.26 {"installer":{"name":"uv","version":"0.9.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for fastmssql-0.6.0-cp313-cp313t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 16a832118215746fd74b2c6a75b931a7db0c9d01a69523ae5ec4a09d5d862dde
MD5 5c764c22842f56235f7393c62630d5b9
BLAKE2b-256 4b3c4e81fa729c79cab749cc514efce1e0afeaea5b94726a118aa369321e3a8c

See more details on using hashes here.

File details

Details for the file fastmssql-0.6.0-cp313-cp313t-manylinux_2_28_x86_64.whl.

File metadata

  • Download URL: fastmssql-0.6.0-cp313-cp313t-manylinux_2_28_x86_64.whl
  • Upload date:
  • Size: 3.1 MB
  • Tags: CPython 3.13t, manylinux: glibc 2.28+ x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.9.26 {"installer":{"name":"uv","version":"0.9.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for fastmssql-0.6.0-cp313-cp313t-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 f6dfb07387f9e7eac78d3b6622689ace3a3e0d405a635ea827a498a1a073460b
MD5 3a54fff606cd709746755b1026f8ab8f
BLAKE2b-256 4a647dfd70c5ff0db5262542143514e7f5cacfe0748b95a95e7cf167863e0b80

See more details on using hashes here.

File details

Details for the file fastmssql-0.6.0-cp313-cp313t-macosx_10_15_universal2.whl.

File metadata

  • Download URL: fastmssql-0.6.0-cp313-cp313t-macosx_10_15_universal2.whl
  • Upload date:
  • Size: 5.8 MB
  • Tags: CPython 3.13t, macOS 10.15+ universal2 (ARM64, x86-64)
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.9.26 {"installer":{"name":"uv","version":"0.9.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for fastmssql-0.6.0-cp313-cp313t-macosx_10_15_universal2.whl
Algorithm Hash digest
SHA256 b6bf44f0991f76ef65f08665c2ec8fc1339648655ac566b9e3c2c2c189956805
MD5 a4b960c786d0a8eb627be839e4be7fde
BLAKE2b-256 d9e1de2d8d90801fd18f2544f03c3e19ce7685999aae6e065343fb6da62b5d1c

See more details on using hashes here.

File details

Details for the file fastmssql-0.6.0-cp310-abi3-win_amd64.whl.

File metadata

  • Download URL: fastmssql-0.6.0-cp310-abi3-win_amd64.whl
  • Upload date:
  • Size: 2.7 MB
  • Tags: CPython 3.10+, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.9.26 {"installer":{"name":"uv","version":"0.9.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for fastmssql-0.6.0-cp310-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 5b82014ec9fd73047f210dcef7d433fb5f84ce57e1f5909cc4b5eb514f530f3a
MD5 fcb3bbf5a6e9e37a040246d45dcfb282
BLAKE2b-256 81068bcaa954ac254d5218d618bb3e459762f1795d7f9ba5f5ec3d610099f32b

See more details on using hashes here.

File details

Details for the file fastmssql-0.6.0-cp310-abi3-musllinux_1_2_x86_64.whl.

File metadata

  • Download URL: fastmssql-0.6.0-cp310-abi3-musllinux_1_2_x86_64.whl
  • Upload date:
  • Size: 3.2 MB
  • Tags: CPython 3.10+, musllinux: musl 1.2+ x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.9.26 {"installer":{"name":"uv","version":"0.9.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for fastmssql-0.6.0-cp310-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 13b30879917546977630300252bcfb80dd6eeb659bdb3e266b8a00b49fffcb36
MD5 3ee07f2c6e5c20ccd9b58ef2f620f24b
BLAKE2b-256 c6650ae2e6942322360d4b1ee1a7fe8674574ea9f1eff10d42ebb1cf6bc9873f

See more details on using hashes here.

File details

Details for the file fastmssql-0.6.0-cp310-abi3-manylinux_2_28_x86_64.whl.

File metadata

  • Download URL: fastmssql-0.6.0-cp310-abi3-manylinux_2_28_x86_64.whl
  • Upload date:
  • Size: 3.1 MB
  • Tags: CPython 3.10+, manylinux: glibc 2.28+ x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.9.26 {"installer":{"name":"uv","version":"0.9.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for fastmssql-0.6.0-cp310-abi3-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 c374344b50ae530b76b954b4bfa3305d3325f60b125f2dde153938aa54d1aec8
MD5 0a0802a01d68c5b908907d11c0bbef70
BLAKE2b-256 6cbedec4b2dfff081d98e51ce49e9b419c5966fbe0fd50ca36f68df4238180ca

See more details on using hashes here.

File details

Details for the file fastmssql-0.6.0-cp310-abi3-macosx_10_15_universal2.whl.

File metadata

  • Download URL: fastmssql-0.6.0-cp310-abi3-macosx_10_15_universal2.whl
  • Upload date:
  • Size: 5.8 MB
  • Tags: CPython 3.10+, macOS 10.15+ universal2 (ARM64, x86-64)
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.9.26 {"installer":{"name":"uv","version":"0.9.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}

File hashes

Hashes for fastmssql-0.6.0-cp310-abi3-macosx_10_15_universal2.whl
Algorithm Hash digest
SHA256 c643e33ae90bbf76daaf5a1c66064155ea50b4739ca5ea739b1871dfad2179b9
MD5 41b69a2dbeee9b283724d71266b861a8
BLAKE2b-256 a7af57d7660cd2036d4f620caa18d22ce2e20ed5ea7d9762ffa5c6b001d1651b

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