diff --git a/databases/backends/postgres.py b/databases/backends/postgres.py index e30c12d7..a2468bad 100644 --- a/databases/backends/postgres.py +++ b/databases/backends/postgres.py @@ -140,7 +140,10 @@ def __getitem__(self, key: typing.Any) -> typing.Any: elif isinstance(key, int): idx, datatype = self._column_map_int[key] else: - idx, datatype = self._column_map[key] + try: + idx, datatype = self._column_map[key] + except KeyError: + return self._row[key] raw = self._row[idx] processor = datatype._cached_result_processor(self._dialect, None) diff --git a/tests/test_databases.py b/tests/test_databases.py index 4d737261..a17d7f00 100644 --- a/tests/test_databases.py +++ b/tests/test_databases.py @@ -208,6 +208,24 @@ async def test_queries(database_url): @pytest.mark.parametrize("database_url", DATABASE_URLS) @async_adapter +async def test_queries_manual(database_url): + async with Database(database_url) as database: + async with database.transaction(force_rollback=True): + _t = sqlalchemy.sql.text + + query = notes.insert() + values = {"text": "example1", "completed": True} + await database.execute(query, values) + + query = sqlalchemy.select([_t("n.text")], from_obj=[_t("notes n")]) + result = await database.fetch_one(query) + + assert dict(result) + + +@pytest.mark.parametrize("database_url", DATABASE_URLS) +@mysql_versions +@async_adapter async def test_queries_raw(database_url): """ Test that the basic `execute()`, `execute_many()`, `fetch_all()``, and