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.11 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/.

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.3.tar.gz (252.5 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.3-cp314-cp314t-win_amd64.whl (2.7 MB view details)

Uploaded CPython 3.14tWindows x86-64

fastmssql-0.6.3-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.3-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.3-cp314-cp314t-macosx_10_15_universal2.whl (5.7 MB view details)

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

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

Uploaded CPython 3.13tWindows x86-64

fastmssql-0.6.3-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.3-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.3-cp313-cp313t-macosx_10_15_universal2.whl (5.7 MB view details)

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

fastmssql-0.6.3-cp311-abi3-win_amd64.whl (2.7 MB view details)

Uploaded CPython 3.11+Windows x86-64

fastmssql-0.6.3-cp311-abi3-musllinux_1_2_x86_64.whl (3.2 MB view details)

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

fastmssql-0.6.3-cp311-abi3-manylinux_2_28_x86_64.whl (3.1 MB view details)

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

fastmssql-0.6.3-cp311-abi3-macosx_10_15_universal2.whl (5.7 MB view details)

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

File details

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

File metadata

  • Download URL: fastmssql-0.6.3.tar.gz
  • Upload date:
  • Size: 252.5 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.10.2 {"installer":{"name":"uv","version":"0.10.2","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.3.tar.gz
Algorithm Hash digest
SHA256 95958e3c127e761133e961f48534018b65eb0b849fb1d85c1f913eaed72a660c
MD5 c6d9841ca1e124d8fbc7169a6afea66a
BLAKE2b-256 a09e4b93907076293453bd1458b0cb25166a47ae3fb5e75774d190acde9a11a1

See more details on using hashes here.

File details

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

File metadata

  • Download URL: fastmssql-0.6.3-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.10.2 {"installer":{"name":"uv","version":"0.10.2","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.3-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 aa135747dc609a87f6e436edeabb6256872a5913b1dc952d60ec3c6ebcef7df5
MD5 1164f827fd69bb3feed3706af9f87282
BLAKE2b-256 b4299038d952bce9a4a7aed56da871e0b5ace5b74d84b2d7cb2557537c38d091

See more details on using hashes here.

File details

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

File metadata

  • Download URL: fastmssql-0.6.3-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.10.2 {"installer":{"name":"uv","version":"0.10.2","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.3-cp314-cp314t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 3f5c1c9d9d022da49b1c2adec439180a44463e47dfeb0f62d742742bef87648e
MD5 f265acc809761b522fc8df903eb0b11d
BLAKE2b-256 1f82dac3d845f5df4b57bbb1fe7f8fef30efbfc0a0394ebc7d04feabce1a667d

See more details on using hashes here.

File details

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

File metadata

  • Download URL: fastmssql-0.6.3-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.10.2 {"installer":{"name":"uv","version":"0.10.2","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.3-cp314-cp314t-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 7ba6d1e47faf6f9b07bb7e057f114d9cc4fc507bf1b5d72739c3d7c38c9e389e
MD5 ae83cdf6e6b532e3a91d08f5236d6924
BLAKE2b-256 9d715c8f4f234171cca0b267aab363f9421f72b5bb8e9b2dcddf54183973f14a

See more details on using hashes here.

File details

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

File metadata

  • Download URL: fastmssql-0.6.3-cp314-cp314t-macosx_10_15_universal2.whl
  • Upload date:
  • Size: 5.7 MB
  • Tags: CPython 3.14t, macOS 10.15+ universal2 (ARM64, x86-64)
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.10.2 {"installer":{"name":"uv","version":"0.10.2","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.3-cp314-cp314t-macosx_10_15_universal2.whl
Algorithm Hash digest
SHA256 182f3ecf9cdfd863d81396c99376c639d532f911e90874c8566ff979727dcf9a
MD5 8306216c1b5d51af5f679fe933a97bd3
BLAKE2b-256 a2f738b202baad568d2a0b99fcb5f04bc86aa626a24798d13b241c821e5a487e

See more details on using hashes here.

File details

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

File metadata

  • Download URL: fastmssql-0.6.3-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.10.2 {"installer":{"name":"uv","version":"0.10.2","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.3-cp313-cp313t-win_amd64.whl
Algorithm Hash digest
SHA256 b3b3539ecd0447d6ed852173b2655764ef25e3b1867959fab605be48b4b9690d
MD5 2a97c0d81845c23e21068433f8b8e523
BLAKE2b-256 70a1deca499585ba9e3147aa24e05a7d0f01181ec15bd944d144203af83dd5ed

See more details on using hashes here.

File details

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

File metadata

  • Download URL: fastmssql-0.6.3-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.10.2 {"installer":{"name":"uv","version":"0.10.2","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.3-cp313-cp313t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 027d79da2f04aadc3e690b2b93a570b7bffeef3dcee41409e58e8d5c601cce6d
MD5 9995270b88f5e150c8d96ca06ab655c1
BLAKE2b-256 45665f0ee1e6c7de6f3a56db73fa7da63fb7c61744f07553ee8db91ca98315c0

See more details on using hashes here.

File details

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

File metadata

  • Download URL: fastmssql-0.6.3-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.10.2 {"installer":{"name":"uv","version":"0.10.2","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.3-cp313-cp313t-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 1361443578ab97054b4ab1d91e6adf9d8794eb05b32658477c35d536e1018868
MD5 6ad6b491121df06f9862aa5344049802
BLAKE2b-256 057d3cfba207086a3cdcb261cca953cd052571f4885aee0eb8024a9524d692a5

See more details on using hashes here.

File details

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

File metadata

  • Download URL: fastmssql-0.6.3-cp313-cp313t-macosx_10_15_universal2.whl
  • Upload date:
  • Size: 5.7 MB
  • Tags: CPython 3.13t, macOS 10.15+ universal2 (ARM64, x86-64)
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.10.2 {"installer":{"name":"uv","version":"0.10.2","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.3-cp313-cp313t-macosx_10_15_universal2.whl
Algorithm Hash digest
SHA256 506c1b6f220e7db94f9035c14ba924c5db793a1053904ea70e4ea255d4a74bf0
MD5 311641a7d0233f34578a373c518b7d0c
BLAKE2b-256 5c5d528584c4dd1647d6e43b320669701c4e843db93c3cc3d7601ced352b4702

See more details on using hashes here.

File details

Details for the file fastmssql-0.6.3-cp311-abi3-win_amd64.whl.

File metadata

  • Download URL: fastmssql-0.6.3-cp311-abi3-win_amd64.whl
  • Upload date:
  • Size: 2.7 MB
  • Tags: CPython 3.11+, Windows x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.10.2 {"installer":{"name":"uv","version":"0.10.2","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.3-cp311-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 faf329096c94fdc29f3c41803591c1632a1bac9b29d9cb196bc28bd94b99f1d5
MD5 2681f1ab8dca5592033d1786e58189e3
BLAKE2b-256 24b2410db27bae38548b7dfb63971ad6d63db3c5da8b3142e524539f40499ac1

See more details on using hashes here.

File details

Details for the file fastmssql-0.6.3-cp311-abi3-musllinux_1_2_x86_64.whl.

File metadata

  • Download URL: fastmssql-0.6.3-cp311-abi3-musllinux_1_2_x86_64.whl
  • Upload date:
  • Size: 3.2 MB
  • Tags: CPython 3.11+, musllinux: musl 1.2+ x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.10.2 {"installer":{"name":"uv","version":"0.10.2","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.3-cp311-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 9c742e1ff948631a0704d445fd3fc98ef6586478918a0fdb17c589e805f3b61d
MD5 e6aa0f2feded85ea5ec27c9401ee86e6
BLAKE2b-256 6af96118dcc2a91e51399d01c75bef412f1a6b27ed4227bdd2a4c524127ebd71

See more details on using hashes here.

File details

Details for the file fastmssql-0.6.3-cp311-abi3-manylinux_2_28_x86_64.whl.

File metadata

  • Download URL: fastmssql-0.6.3-cp311-abi3-manylinux_2_28_x86_64.whl
  • Upload date:
  • Size: 3.1 MB
  • Tags: CPython 3.11+, manylinux: glibc 2.28+ x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.10.2 {"installer":{"name":"uv","version":"0.10.2","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.3-cp311-abi3-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 069600689bf5212f745547603c858bcc6545b7b88d71059ae209d9a4bdf51a18
MD5 09e8324258dc626dac7499542129da33
BLAKE2b-256 cb3fa3273d193861791560627dc8803b0bf069beae1b73dbc018c1994e998e6c

See more details on using hashes here.

File details

Details for the file fastmssql-0.6.3-cp311-abi3-macosx_10_15_universal2.whl.

File metadata

  • Download URL: fastmssql-0.6.3-cp311-abi3-macosx_10_15_universal2.whl
  • Upload date:
  • Size: 5.7 MB
  • Tags: CPython 3.11+, macOS 10.15+ universal2 (ARM64, x86-64)
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.10.2 {"installer":{"name":"uv","version":"0.10.2","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.3-cp311-abi3-macosx_10_15_universal2.whl
Algorithm Hash digest
SHA256 5fb8217e801413d6e52a360ebb6aee6344ce1599128102b37de718985a39fc4c
MD5 2919e2e727d6e75b61db5da9c20d001d
BLAKE2b-256 2b23fa51044f6b7c8ee43a43b184141402ece5384b8998fc8a77df9d06da8277

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