pyro_mysql

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

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