На сайте не выводит новости
Вот код, где лежит функция:
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 шт):
Метод 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