pyro_mysql API documentation

# pyro_mysql

pyro_mysql - High-performance MySQL driver for Python, written in Rust.

- pyro_mysql.sync: The synchronous API using the `mysql` crate.
- pyro_mysql.async_: The asynchronous API using the `mysql_async` crate.
- pyro_mysql.error: Exceptions.

    import asyncio
    import pyro_mysql as mysql

    mysql.init(worker_threads=1)

    async def example_select():
        conn = await mysql.Conn.new("mysql://localhost@127.0.0.1:3306/test")
        rows = await conn.exec("SELECT * from mydb.mytable")
        print(row[-1].to_dict())

    async def example_transaction():
        conn = await mysql.Conn.new("mysql://localhost@127.0.0.1:3306/test")

        async with conn.start_transaction() as tx:
            await tx.exec_drop(
                "INSERT INTO test.asyncmy(`decimal`, `date`, `datetime`, `float`, `string`, `tinyint`) VALUES (?,?,?,?,?,?)",
                (
                    1,
                    "2021-01-01",
                    "2020-07-16 22:49:54",
                    1,
                    "asyncmy",
                    1,
                ),
            )
            await tx.commit()

        await len(conn.exec('SELECT * FROM mydb.mytable')) == 100

    # The connection pool is not tied to a single event loop.
    # You can reuse the pool between event loops.
    asyncio.run(example_pool())
    asyncio.run(example_select())
    asyncio.run(example_transaction())
    ...

View Source

    1from .pyro_mysql import *
    2
    3__doc__ = pyro_mysql.__doc__
    4if hasattr(pyro_mysql, "__all__"):
    5    __all__ = pyro_mysql.__all__

def init(worker_threads: int | None = 1, thread_name: str | None = None) -> None:

Initialize the Tokio runtime for async operations. This function can be called multiple times until Any async operation is called.

###### Arguments:

- worker_threads: Number of worker threads for the Tokio runtime. If None, set to the number of CPUs.
- thread_name: Name prefix for worker threads.

class Row:
def to_tuple(self, /):

The type of the None singleton.

def to_dict(self, /):

The type of the None singleton.

class IsolationLevel:
def as_str(self, /):

The type of the None singleton.

ReadUncommitted = IsolationLevel.ReadUncommitted
ReadCommitted = IsolationLevel.ReadCommitted
RepeatableRead = IsolationLevel.RepeatableRead
Serializable = IsolationLevel.Serializable
class CapabilityFlags:
CLIENT_LONG_PASSWORD = 1
CLIENT_FOUND_ROWS = 2
CLIENT_LONG_FLAG = 4
CLIENT_CONNECT_WITH_DB = 8
CLIENT_NO_SCHEMA = 16
CLIENT_COMPRESS = 32
CLIENT_ODBC = 64
CLIENT_LOCAL_FILES = 128
CLIENT_IGNORE_SPACE = 256
CLIENT_PROTOCOL_41 = 512
CLIENT_INTERACTIVE = 1024
CLIENT_SSL = 2048
CLIENT_IGNORE_SIGPIPE = 4096
CLIENT_TRANSACTIONS = 8192
CLIENT_RESERVED = 16384
CLIENT_SECURE_CONNECTION = 32768
CLIENT_MULTI_STATEMENTS = 65536
CLIENT_MULTI_RESULTS = 131072
CLIENT_PS_MULTI_RESULTS = 262144
CLIENT_PLUGIN_AUTH = 524288
CLIENT_CONNECT_ATTRS = 1048576
CLIENT_PLUGIN_AUTH_LENENC_CLIENT_DATA = 2097152
CLIENT_CAN_HANDLE_EXPIRED_PASSWORDS = 4194304
CLIENT_SESSION_TRACK = 8388608
CLIENT_DEPRECATE_EOF = 16777216
CLIENT_OPTIONAL_RESULTSET_METADATA = 33554432
CLIENT_ZSTD_COMPRESSION_ALGORITHM = 67108864
CLIENT_QUERY_ATTRIBUTES = 134217728
MULTI_FACTOR_AUTHENTICATION = 268435456
CLIENT_PROGRESS_OBSOLETE = 536870912
CLIENT_SSL_VERIFY_SERVER_CERT = 1073741824
CLIENT_REMEMBER_OPTIONS = 2147483648
class PyroFuture:

A wrapper around a Python future that cancels the associated Rust future when dropped.

def cancel(self, /):

The type of the None singleton.

def get_loop(self, /):

The type of the None singleton.

class Pool:
def get(self, /):

The type of the None singleton.

def get(self, /):

The type of the None singleton.

class Conn:
def start_transaction( self, /, consistent_snapshot=False, isolation_level=None, readonly=None):

The type of the None singleton.

def id(self, /):

The type of the None singleton.

def affected_rows(self, /):

The type of the None singleton.

def last_insert_id(self, /):

The type of the None singleton.

def ping(self, /):

The type of the None singleton.

def query(self, /, query):

The type of the None singleton.

def query_first(self, /, query):

The type of the None singleton.

def query_drop(self, /, query):

The type of the None singleton.

def query_iter(self, /, query):

The type of the None singleton.

def exec(self, /, query, params=Ellipsis):

The type of the None singleton.

def exec_first(self, /, query, params=Ellipsis):

The type of the None singleton.

def exec_drop(self, /, query, params=Ellipsis):

The type of the None singleton.

def exec_batch(self, /, query, params_list=Ellipsis):

The type of the None singleton.

def exec_iter(self, /, query, params=Ellipsis):

The type of the None singleton.

def close(self, /):

The type of the None singleton.

def reset(self, /):

The type of the None singleton.

def server_version(self, /):

The type of the None singleton.

class Transaction:
def commit(self, /):

The type of the None singleton.

def rollback(self, /):

The type of the None singleton.

def affected_rows(self, /):

The type of the None singleton.

def query(self, /, query):

The type of the None singleton.

def query_first(self, /, query):

The type of the None singleton.

def query_drop(self, /, query):

The type of the None singleton.

def query_iter(self, /, query):

The type of the None singleton.

def exec(self, /, query, params=Ellipsis):

The type of the None singleton.

def exec_first(self, /, query, params=Ellipsis):

The type of the None singleton.

def exec_drop(self, /, query, params=Ellipsis):

The type of the None singleton.

def exec_batch(self, /, query, params_list=Ellipsis):

The type of the None singleton.

def exec_iter(self, /, query, params=Ellipsis):

The type of the None singleton.

class Opts:
def pool_opts(self, /, pool_opts):

The type of the None singleton.

class OptsBuilder:
def from_opts(opts):

The type of the None singleton.

def from_url(url):

The type of the None singleton.

def from_hash_map(self, /, params):

The type of the None singleton.

def ip_or_hostname(self, /, hostname):

The type of the None singleton.

def tcp_port(self, /, port):

The type of the None singleton.

def socket(self, /, path):

The type of the None singleton.

def bind_address(self, /, address):

The type of the None singleton.

def user(self, /, username):

The type of the None singleton.

def password(self, /, password):

The type of the None singleton.

def db_name(self, /, database):

The type of the None singleton.

def secure_auth(self, /, enable):

The type of the None singleton.

def read_timeout(self, /, seconds):

The type of the None singleton.

def write_timeout(self, /, seconds):

The type of the None singleton.

def tcp_connect_timeout(self, /, seconds):

The type of the None singleton.

def stmt_cache_size(self, /, size):

The type of the None singleton.

def tcp_nodelay(self, /, enable):

The type of the None singleton.

def tcp_keepalive_time_ms(self, /, time_ms):

The type of the None singleton.

def tcp_keepalive_probe_interval_secs(self, /, interval_secs):

The type of the None singleton.

def tcp_keepalive_probe_count(self, /, count):

The type of the None singleton.

def tcp_user_timeout_ms(self, /, timeout_ms):

The type of the None singleton.

def max_allowed_packet(self, /, max_allowed_packet):

The type of the None singleton.

def prefer_socket(self, /, prefer_socket):

The type of the None singleton.

def init(self, /, commands):

The type of the None singleton.

def connect_attrs(self, /, attrs):

The type of the None singleton.

def compress(self, /, level):

The type of the None singleton.

def ssl_opts(self, /, _opts):

The type of the None singleton.

def local_infile_handler(self, /, _handler):

The type of the None singleton.

def pool_opts(self, /, opts):

The type of the None singleton.

def additional_capabilities(self, /, capabilities):

The type of the None singleton.

def enable_cleartext_plugin(self, /, enable):

The type of the None singleton.

def build(self, /):

The type of the None singleton.

class PoolOpts:
def with_constraints(self, /, constraints):

The type of the None singleton.

class PooledConn:
def start_transaction( self, /, consistent_snapshot=False, isolation_level=None, readonly=None):

The type of the None singleton.

def affected_rows(self, /):

The type of the None singleton.

def ping(self, /):

The type of the None singleton.

def query(self, /, query):

The type of the None singleton.

def query_first(self, /, query):

The type of the None singleton.

def query_drop(self, /, query):

The type of the None singleton.

def query_iter(self, /, query):

The type of the None singleton.

def exec(self, /, query, params=Ellipsis):

The type of the None singleton.

def exec_first(self, /, query, params=Ellipsis):

The type of the None singleton.

def exec_drop(self, /, query, params=Ellipsis):

The type of the None singleton.

def exec_batch(self, /, query, params_list=Ellipsis):

The type of the None singleton.

def exec_iter(self, /, query, params=Ellipsis):

The type of the None singleton.

def close(self, /):

The type of the None singleton.

Value: 'type[None | bool | int | float | str | bytes | bytearray | tuple[Any, ...] | list[Any] | dict[str, Any] | datetime.datetime | datetime.date | datetime.time | datetime.timedelta | time.struct_time | decimal.Decimal]'

Type alias for the purpose of documenation.

These Python types can be converted to MySQL values:

- `None`
- `bool`
- `int`
- `float`
- `str`
- `bytes`
- `bytearray`
- `tuple[Any, ...]`
- `list[Any]`
- `dict[str, Any]`
- `datetime.datetime`
- `datetime.date`
- `datetime.time`
- `datetime.timedelta`
- `time.struct_time`
- `decimal.Decimal`

Params: 'type[None | tuple[Value, ...] | list[Value] | dict[str, Value]]'

Type alias for the purpose of documenation.

Parameters that can be passed to query execution methods:

- `None`: No parameters
- `tuple[Value, ...]`: Positional parameters for queries with ? placeholders
- `list[Value]`: List of parameters for queries with ? placeholders
- `dict[str, Value]`: Named parameters for queries with named placeholders

Examples:

###### No parameters:

> `await conn.exec("SELECT * FROM users")`

###### Positional parameters:

> `await conn.exec("SELECT * FROM users WHERE id = ?", (123,))`

###### Multiple positional parameters:

> `await conn.exec("SELECT * FROM users WHERE age > ? AND city = ?", (18, "NYC"))`

###### Named parameters:

> `await conn.exec("SELECT * FROM users WHERE age > :age AND city = :city", dict(age=18, name="NYC"))`