Выборка данных в 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__
, поэтому вывод такой. Можете попробовать реализовать эти методы, чтобы класс можно было печатать не по полям, а сразу всем объектом нормально. А может есть какой-то декоратор или базовый класс, позволяющий сделать это автоматом, тут я не в курсе.