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
  • Apache Arrow support

Installation

From PyPI (recommended)

pip install fastmssql

Optional dependencies

Apache Arrow support (for to_arrow() method):

pip install fastmssql[arrow]

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())

Apache Arrow

Convert query results to Apache Arrow tables for efficient bulk data processing and interoperability with data science tools:

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:
        # Execute query and convert to Arrow
        result = await conn.query("SELECT id, name, salary FROM employees")
        arrow_table = result.to_arrow()
        
        # Arrow Table enables:
        # - Efficient columnar storage and compute
        # - Integration with Pandas, DuckDB, Polars
        # - Parquet/ORC serialization
        df = arrow_table.to_pandas()  # Convert to pandas DataFrame
        print(df)
        
        # Write to Parquet for long-term storage
        import pyarrow.parquet as pq
        pq.write_table(arrow_table, "employees.parquet")
        
        # Or use with DuckDB for analytical queries
        import duckdb
        result = duckdb.from_arrow(arrow_table).filter("salary > 50000").execute()
        print(result.fetchall())

Requirements: Install PyArrow with pip install pyarrow

Note: Results are converted eagerly into Arrow arrays. For very large datasets, consider chunking queries or using iteration-based processing instead.

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=PoolConfig.high_throughput()) 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, SqlError

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

Uploaded CPython 3.14tWindows x86-64

fastmssql-0.7.1-cp314-cp314t-musllinux_1_2_x86_64.whl (3.3 MB view details)

Uploaded CPython 3.14tmusllinux: musl 1.2+ x86-64

fastmssql-0.7.1-cp314-cp314t-manylinux_2_28_x86_64.whl (3.2 MB view details)

Uploaded CPython 3.14tmanylinux: glibc 2.28+ x86-64

fastmssql-0.7.1-cp314-cp314t-macosx_10_15_universal2.whl (5.9 MB view details)

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

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

Uploaded CPython 3.13tWindows x86-64

fastmssql-0.7.1-cp313-cp313t-musllinux_1_2_x86_64.whl (3.3 MB view details)

Uploaded CPython 3.13tmusllinux: musl 1.2+ x86-64

fastmssql-0.7.1-cp313-cp313t-manylinux_2_28_x86_64.whl (3.2 MB view details)

Uploaded CPython 3.13tmanylinux: glibc 2.28+ x86-64

fastmssql-0.7.1-cp313-cp313t-macosx_10_15_universal2.whl (5.9 MB view details)

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

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

Uploaded CPython 3.11+Windows x86-64

fastmssql-0.7.1-cp311-abi3-musllinux_1_2_x86_64.whl (3.3 MB view details)

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

fastmssql-0.7.1-cp311-abi3-manylinux_2_28_x86_64.whl (3.2 MB view details)

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

fastmssql-0.7.1-cp311-abi3-macosx_10_15_universal2.whl (5.9 MB view details)

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

File details

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

File metadata

  • Download URL: fastmssql-0.7.1.tar.gz
  • Upload date:
  • Size: 290.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.14 {"installer":{"name":"uv","version":"0.11.14","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.7.1.tar.gz
Algorithm Hash digest
SHA256 d0e30edd1be37ed2cfa893376993f0aea2cf77f93bc498cf7204af06814a1f63
MD5 9b0efc6322a0bcab1539583b9434dcae
BLAKE2b-256 45eecfc4b4853d4e65beeb4fda570d1569926851f8044d6619d520aeb9485f95

See more details on using hashes here.

File details

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

File metadata

  • Download URL: fastmssql-0.7.1-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.11.14 {"installer":{"name":"uv","version":"0.11.14","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.7.1-cp314-cp314t-win_amd64.whl
Algorithm Hash digest
SHA256 7d60336785165a911e6afb6dbc1958bfb7fd6a86a029cf29c1e453ca381460ee
MD5 41ecdd60c74cb43f77dd0c92b811fae5
BLAKE2b-256 f4e4177182b18a676fa74cc6379df5664cc7855072aa2ad252cf758d7aac5b29

See more details on using hashes here.

File details

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

File metadata

  • Download URL: fastmssql-0.7.1-cp314-cp314t-musllinux_1_2_x86_64.whl
  • Upload date:
  • Size: 3.3 MB
  • Tags: CPython 3.14t, musllinux: musl 1.2+ x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.14 {"installer":{"name":"uv","version":"0.11.14","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.7.1-cp314-cp314t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 270e08bb948becb1f68ad5f8d60cd88f750862629c658d099ba44714d2890049
MD5 1744f1a92a6dc48767dd6d74339a04d4
BLAKE2b-256 bcf7c6bb5c645ed1c875fc67565f1dc22fe721c3e75158b3e2d44c6ee2d72878

See more details on using hashes here.

File details

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

File metadata

  • Download URL: fastmssql-0.7.1-cp314-cp314t-manylinux_2_28_x86_64.whl
  • Upload date:
  • Size: 3.2 MB
  • Tags: CPython 3.14t, manylinux: glibc 2.28+ x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.14 {"installer":{"name":"uv","version":"0.11.14","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.7.1-cp314-cp314t-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 b66fb34f62899178ecd8ef8e4f15031e289f86ec7e18ae76d8fa6681589d9a8b
MD5 1d988bad2ca5cad996f0ce557066b09b
BLAKE2b-256 1c397f01a4baa2350e714bf9f7a6a874ea74302f585e81f9199f7ecfd139789c

See more details on using hashes here.

File details

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

File metadata

  • Download URL: fastmssql-0.7.1-cp314-cp314t-macosx_10_15_universal2.whl
  • Upload date:
  • Size: 5.9 MB
  • Tags: CPython 3.14t, macOS 10.15+ universal2 (ARM64, x86-64)
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.14 {"installer":{"name":"uv","version":"0.11.14","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.7.1-cp314-cp314t-macosx_10_15_universal2.whl
Algorithm Hash digest
SHA256 6ed3bc890189b143b2b9b27d7d272e90f7e6196a6062d7320d819536aead7a80
MD5 07e6d60231b1c594cfc29344f53a3f6b
BLAKE2b-256 e9e7e4106bd47705241ab4d079317e2b95221f30a8111e52193aa149a5cce89c

See more details on using hashes here.

File details

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

File metadata

  • Download URL: fastmssql-0.7.1-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.11.14 {"installer":{"name":"uv","version":"0.11.14","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.7.1-cp313-cp313t-win_amd64.whl
Algorithm Hash digest
SHA256 0e85a51840e212ab7ce4010daeebe1e2fba2513131d4bee496d3f30b7f217b8c
MD5 b5c04aecb81e169344c688c6bc56dda9
BLAKE2b-256 2ce9fd668f5f51130569fde7497de815794e74706522a14f22c4a46c550e2649

See more details on using hashes here.

File details

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

File metadata

  • Download URL: fastmssql-0.7.1-cp313-cp313t-musllinux_1_2_x86_64.whl
  • Upload date:
  • Size: 3.3 MB
  • Tags: CPython 3.13t, musllinux: musl 1.2+ x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.14 {"installer":{"name":"uv","version":"0.11.14","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.7.1-cp313-cp313t-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 eec8e2df77ee4ca007c616b4daeaed9ca5adba4256007890ab5672b820b48263
MD5 4aa3dbd83bda8af1b0d3b0318f1ef513
BLAKE2b-256 5e15bffee657a1e2ee9265c159a72d5eae22af136a4bb0c6a7b98d8a4bfb13da

See more details on using hashes here.

File details

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

File metadata

  • Download URL: fastmssql-0.7.1-cp313-cp313t-manylinux_2_28_x86_64.whl
  • Upload date:
  • Size: 3.2 MB
  • Tags: CPython 3.13t, manylinux: glibc 2.28+ x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.14 {"installer":{"name":"uv","version":"0.11.14","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.7.1-cp313-cp313t-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 a8ac73015cacc185268e4e5bd6793dea183d3692bc804743ec99faed325aef39
MD5 3c0f7d37242b3267accccbdac4b19263
BLAKE2b-256 6ed4736b372953db931ad0ff7496d836a6d4b6d494c18e9f1891c3bd905f550b

See more details on using hashes here.

File details

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

File metadata

  • Download URL: fastmssql-0.7.1-cp313-cp313t-macosx_10_15_universal2.whl
  • Upload date:
  • Size: 5.9 MB
  • Tags: CPython 3.13t, macOS 10.15+ universal2 (ARM64, x86-64)
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.14 {"installer":{"name":"uv","version":"0.11.14","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.7.1-cp313-cp313t-macosx_10_15_universal2.whl
Algorithm Hash digest
SHA256 9de572904fbe9f1b609c38f27b0384756e09d12023330e43c7863a97510197f3
MD5 e7ab70ba65eb75d8aec8be1c17e3cb3a
BLAKE2b-256 ba93713795dc4e56c9864fd7dabaa8d4977947fbc57f78944ee2cb8b7417570c

See more details on using hashes here.

File details

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

File metadata

  • Download URL: fastmssql-0.7.1-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.11.14 {"installer":{"name":"uv","version":"0.11.14","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.7.1-cp311-abi3-win_amd64.whl
Algorithm Hash digest
SHA256 82d1ca70917d1398d773d29a201013565e60721b6321646848c78233ae79dfe6
MD5 1c0f5954494fd040310adfe3396abd44
BLAKE2b-256 7b03f405a0f6c10c740f2ab225d5305178046eda085f3039f318f65680cc9ec5

See more details on using hashes here.

File details

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

File metadata

  • Download URL: fastmssql-0.7.1-cp311-abi3-musllinux_1_2_x86_64.whl
  • Upload date:
  • Size: 3.3 MB
  • Tags: CPython 3.11+, musllinux: musl 1.2+ x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.14 {"installer":{"name":"uv","version":"0.11.14","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.7.1-cp311-abi3-musllinux_1_2_x86_64.whl
Algorithm Hash digest
SHA256 e637b1ef7a3c10103f6792a554c2993b21d5e0e9acdc982947aafb554b18627e
MD5 d336e7699745889aa92cfba7ee3e9e30
BLAKE2b-256 164a98ec91143329ac9d5679d3c5dbfe5e87f54edee1bdaba2e6ab9cb691875b

See more details on using hashes here.

File details

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

File metadata

  • Download URL: fastmssql-0.7.1-cp311-abi3-manylinux_2_28_x86_64.whl
  • Upload date:
  • Size: 3.2 MB
  • Tags: CPython 3.11+, manylinux: glibc 2.28+ x86-64
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.14 {"installer":{"name":"uv","version":"0.11.14","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.7.1-cp311-abi3-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 366a38109f7f1f8c95ea3be87b01cc6aa5ca682de3715943cbfbfa8beb5c1290
MD5 97d47ce60fe57041f5add66966698c97
BLAKE2b-256 7fee507270e7d37b53c165ee839c2065b6f09ffeae26c77997b3061d6dafabbe

See more details on using hashes here.

File details

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

File metadata

  • Download URL: fastmssql-0.7.1-cp311-abi3-macosx_10_15_universal2.whl
  • Upload date:
  • Size: 5.9 MB
  • Tags: CPython 3.11+, macOS 10.15+ universal2 (ARM64, x86-64)
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: uv/0.11.14 {"installer":{"name":"uv","version":"0.11.14","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.7.1-cp311-abi3-macosx_10_15_universal2.whl
Algorithm Hash digest
SHA256 c72a52197c464235a6a042aab3be81118588c7a551d533688ae3935191037445
MD5 f885cdaa420a6f42e6e6398b87291f5a
BLAKE2b-256 94309cffe345ab82e651df36fec8792f22b737f40accfa4da249253176feaa23

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