Skip to content
This repository was archived by the owner on Aug 19, 2025. It is now read-only.

Commit fd42e3f

Browse files
Add fetch_val() interface
1 parent 26c683e commit fd42e3f

File tree

3 files changed

+21
-0
lines changed

3 files changed

+21
-0
lines changed

README.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,10 @@ rows = await database.fetch_all(query=query)
9797
query = notes.select()
9898
row = await database.fetch_one(query=query)
9999

100+
# Fetch single value, defaults to `column=0`.
101+
query = notes.select()
102+
value = await database.fetch_val(query=query)
103+
100104
# Fetch multiple rows without loading them all into memory at once
101105
query = notes.select()
102106
async for row in database.iterate(query=query):

databases/core.py

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,12 @@ async def fetch_one(
101101
async with self.connection() as connection:
102102
return await connection.fetch_one(query, values)
103103

104+
async def fetch_val(
105+
self, query: typing.Union[ClauseElement, str], values: dict = None, column: typing.Any = 0
106+
) -> typing.Any:
107+
async with self.connection() as connection:
108+
return await connection.fetch_val(query, values, column=column)
109+
104110
async def execute(
105111
self, query: typing.Union[ClauseElement, str], values: dict = None
106112
) -> typing.Any:
@@ -175,6 +181,12 @@ async def fetch_one(
175181
) -> typing.Any:
176182
return await self._connection.fetch_one(self._build_query(query, values))
177183

184+
async def fetch_val(
185+
self, query: typing.Union[ClauseElement, str], values: dict = None, column: typing.Any = 0
186+
) -> typing.Any:
187+
row = await self._connection.fetch_one(self._build_query(query, values))
188+
return row[column]
189+
178190
async def execute(
179191
self, query: typing.Union[ClauseElement, str], values: dict = None
180192
) -> typing.Any:

tests/test_databases.py

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -137,6 +137,11 @@ async def test_queries(database_url):
137137
assert result["text"] == "example1"
138138
assert result["completed"] == True
139139

140+
# fetch_val()
141+
query = sqlalchemy.sql.select([notes.c.text])
142+
result = await database.fetch_val(query=query)
143+
assert result == "example1"
144+
140145
# iterate()
141146
query = notes.select()
142147
iterate_results = []

0 commit comments

Comments
 (0)