Выборка данных в sqlalchemy не возвращает данных

пытаюсь вытащить данные из базы данных с помощью sqlalchemy, вот мой код(все таблицы уже созданы):

from sqlalchemy import create_engine, Column, Integer, String, select
from sqlalchemy.orm import as_declarative, Session

eng=create_engine("postgresql+psycopg2://postgres:123456789@localhost/test", echo=True)

@as_declarative()
class BaseModel:
    id=Column(Integer, autoincrement=True, primary_key=True)

class UserModel(BaseModel):
    __tablename__="users"
    name=Column(String)
    password=Column(String)

user1=UserModel(name='Ivan', password='12345')

with Session(eng) as ses:
    # тут я уже добавил пользователя при прошлом запуске программы
    # with ses.begin():
    #     ses.add(user1)
    with ses.begin():
        res=ses.execute(select(UserModel))
        rows = res.fetchall()
        print([row for row in rows])

получаю это:

[(<__main__.UserModel object at 0x000001EC802FD710>,)]

а мне нужно это:

[(1, 'Ivan', '12345')]

в чём проблема?


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

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

Просто возьмите из результата колонку 1 и напечатайте нужные поля вашего объекта:

for row in rows:
    user_model = row[0]
    print(user_model.id, user_model.name, user_model.password)

В классе UserModel не реализованы методы __str__ и/или __repr__, поэтому вывод такой. Можете попробовать реализовать эти методы, чтобы класс можно было печатать не по полям, а сразу всем объектом нормально. А может есть какой-то декоратор или базовый класс, позволяющий сделать это автоматом, тут я не в курсе.

→ Ссылка