Skip to content

Commit 068985a

Browse files
committed
add params to rds data api
1 parent 4cae9fb commit 068985a

File tree

2 files changed

+44
-3
lines changed

2 files changed

+44
-3
lines changed

awswrangler/data_api/rds.py

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -256,7 +256,9 @@ def connect(
256256
return RdsDataApi(resource_arn, database, secret_arn=secret_arn, boto3_session=boto3_session, **kwargs)
257257

258258

259-
def read_sql_query(sql: str, con: RdsDataApi, database: str | None = None, parameters: list[dict[str, Any]] | None = None) -> pd.DataFrame:
259+
def read_sql_query(
260+
sql: str, con: RdsDataApi, database: str | None = None, parameters: list[dict[str, Any]] | None = None
261+
) -> pd.DataFrame:
260262
"""Run an SQL query on an RdsDataApi connection and return the result as a DataFrame.
261263
262264
Parameters
@@ -268,11 +270,28 @@ def read_sql_query(sql: str, con: RdsDataApi, database: str | None = None, param
268270
database
269271
Database to run query on - defaults to the database specified by `con`.
270272
parameters
271-
A list of named parameters e.g. [{"name": "id", "value": "42"}].
273+
A list of named parameters e.g. [{"name": "col", "value": {"stringValue": "val1"}}].
272274
273275
Returns
274276
-------
275277
A Pandas DataFrame containing the query results.
278+
279+
Examples
280+
--------
281+
>>> import awswrangler as wr
282+
>>> df = wr.data_api.rds.read_sql_query(
283+
>>> sql="SELECT * FROM public.my_table",
284+
>>> con=con,
285+
>>> )
286+
287+
>>> import awswrangler as wr
288+
>>> df = wr.data_api.rds.read_sql_query(
289+
>>> sql="SELECT * FROM public.my_table WHERE col = :name",
290+
>>> con=con,
291+
>>> parameters=[
292+
>>> {"name": "col1", "value": {"stringValue": "val1"}}
293+
>>> ],
294+
>>> )
276295
"""
277296
return con.execute(sql, database=database, parameters=parameters)
278297

tests/unit/test_data_api.py

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -131,7 +131,7 @@ def test_data_api_redshift_parameters(redshift_connector: "RedshiftDataApi", red
131131
wr.data_api.redshift.read_sql_query(
132132
f"INSERT INTO public.{redshift_table} VALUES (41, 'test1'), (42, 'test2')", con=redshift_connector
133133
)
134-
expected_dataframe = pd.DataFrame([[42, "test"]], columns=["id", "name"])
134+
expected_dataframe = pd.DataFrame([[42, "test2"]], columns=["id", "name"])
135135

136136
dataframe = wr.data_api.redshift.read_sql_query(
137137
f"SELECT * FROM public.{redshift_table} WHERE id >= :id",
@@ -319,3 +319,25 @@ def test_data_api_postgresql(postgresql_serverless_connector: "RdsDataApi", post
319319
)
320320
expected_dataframe = pd.DataFrame([["test"]], columns=["name"])
321321
assert_pandas_equals(out_frame, expected_dataframe)
322+
323+
324+
def test_data_api_mysql_parameters(
325+
mysql_serverless_connector: "RdsDataApi",
326+
mysql_serverless_table: str,
327+
) -> None:
328+
database = "test"
329+
df = pd.DataFrame([[42, "test"]], columns=["id", "name"])
330+
331+
wr.data_api.rds.to_sql(
332+
df=df,
333+
con=mysql_serverless_connector,
334+
table=mysql_serverless_table,
335+
database=database,
336+
)
337+
338+
out_df = wr.data_api.rds.read_sql_query(
339+
f"SELECT * FROM {database}.{mysql_serverless_table} WHERE name = :name",
340+
con=mysql_serverless_connector,
341+
parameters=[{"name": "name", "value": {"stringValue": "test"}}],
342+
)
343+
assert_pandas_equals(out_df, df)

0 commit comments

Comments
 (0)