code: def test_read_database_parameterised(tmp_path: Path) -> None:
      # setup underlying test data
      tmp_path.mkdir(exist_ok=True)
      create_temp_sqlite_db(test_db := str(tmp_path / "test.db"))
  
      # raw cursor "execute" only takes positional params, alchemy cursor takes kwargs
      raw_conn: ConnectionOrCursor = sqlite3.connect(test_db)
      alchemy_conn: ConnectionOrCursor = create_engine(
          f"sqlite:///{test_db}"
      ).connect()
      test_conns = (alchemy_conn, raw_conn)
  
      # establish parameterised queries and validate usage
      query = """
          SELECT CAST(STRFTIME('%Y',"date") AS INT) as "year", name, value
          FROM test_data
          WHERE value < {n}
      """
      for param, param_value in (
          (":n", {"n": 0}),
          ("?", (0,)),
          ("?", [0]),
      ):
          for conn in test_conns:
              assert_frame_equal(
                  pl.read_database(
                      query.format(n=param),
                      connection=conn,
                      execute_options={"parameters": param_value},
                  ),
                  pl.DataFrame(
                      {
                          "year": [2021],
                          "name": ["other"],
                          "value": [-99.5],
                      }
                  ),
              )
  
imports: from __future__ import annotations
  import os
  import sqlite3
  import sys
  from contextlib import suppress
  from datetime import date
  from pathlib import Path
  from types import GeneratorType
  from typing import TYPE_CHECKING, Any, NamedTuple
  import pytest
  from sqlalchemy import Integer, MetaData, Table, create_engine, func, select
  from sqlalchemy.sql.expression import cast
  import polars
  from polars.exceptions import UnsuitableSQLError
  from polars.io.database import _ARROW_DRIVER_REGISTRY_
  from polars.testing import assert_frame_equal
label_desc: Use image node_id 5 for calling a global function with example usage: test_read_database_parameterised(tmp_path) without return types