На сайте не выводит новости

Вот код, где лежит функция:

from sqlalchemy import create_engine, MetaData, select

url = "sqlite:///vk_parsing.db"
engine = create_engine(url)

metadata = MetaData()
metadata.reflect(bind=engine)

posts = metadata.tables['posts']


def select_page(page, limit_on_page):
    query = select(posts.c).offset(limit_on_page * (page-1)).limit(limit_on_page)
    with engine.connect() as connections:
        result = connections.execute(query)

        for row in result:
            print(' '.join(row))
            return ' '.join(row)

А вот тут выполняется вывод на сайте(ну так себе вывод):

from src.crud import select_page
from fastapi import FastAPI

app = FastAPI()


@app.get("/")
async def root():
    page = select_page(2, 3)
    return page

Сама ошибка происходит вот тут и тут же я пытался пофиксить это:

        for row in result:
            print(' '.join(row))
            return ' '.join(row)

^^^Тут мне надо распаковать result, чтобы тот выводился на "сайте" только с номером страницы и текстом. Помогите пожалуйста


Ответы (1 шт):

Автор решения: sxmrxk

Метод execute() возвращает обьект класса Result (это прокси над вашими данными), из него нужно достать данные посредством one(), first(), all() и т.д. в вашем случае перед return написать:

def select_page(page, limit_on_page):
    query = select(posts.c).offset(limit_on_page * (page-1)).limit(limit_on_page)
    with engine.connect() as connections:
        result = connections.execute(query)
        result = result.scalars().all()
        return ''.join(result)

scalars() нужен чтобы превратить данные вида (1) в 1 (избавляемся от кортежа) в вашем случае это лучше сделать т.к. вы достаете только одно значение select(posts.c) all() говорит о том что нам нужно достать все строки из полученного результата. Если вы достаете одно уникальное значение можно применить one() или first()

Предлагаю ознакомиться с полным API на офиц. сайте документации SQLAlchemy

→ Ссылка