SQLAlchemy выберите с помощью ORM результирующая строка содержит только место в памяти

#python #database #sqlalchemy

Вопрос:

Я думаю, что неправильно понял что-то важное и очевидное, я пытаюсь использовать ORM SQLAlchemy для выбора строки из таблицы в базе данных и возврата значений. Первый шаг-получить строку и получить к ней доступ, оттуда я думаю, что все в порядке, однако, когда я выбираю строку и пытаюсь исследовать возвращаемый объект, все, что я нахожу, — это адрес объекта в памяти: lt;main.Объект карты пользователя по адресу 0x000001F65A54B490gt;,

Попытка использовать objprint для исследования объекта не дает дополнительной информации, я сбит с толку, насколько я понимаю, результирующий объект строки должен вести себя как кортеж, поэтому, по крайней мере, objprint должен найти в нем множество записей, даже если он не может их распечатать из-за того, что они не являются типами данных.

Заявление, о котором идет речь: select(UserMap).where(UserMap.google_auth == '***********************')

более простой выбор(карта пользователя) также, по-видимому, дает аналогичный результат.

Таблица содержит некоторые поля в виде строк, некоторые в виде целых чисел, а некоторые в форматах даты и времени, но, очевидно, только один тип в столбце.

Я использую session.execute, я хотел бы избежать запроса, так как понимаю, что его функциональность устарела в API 2.x, если я неправильно понял это, то я рад попытаться это сделать, но все равно хотел бы понять, что я неправильно понимаю в результатах и объектах строк.

Как я уже сказал, я думаю, что пропустил что-то важное, но не понимаю, что, насколько я вижу, я выполняю инструкции почти так же, как показано в документации ORM, например:

 gt;gt;gt; stmt = select(User).where(User.name == 'spongebob') gt;gt;gt; with Session(engine) as session: ... for row in session.execute(stmt): ... print(row)  

Ответ №1:

lt;main.UserMap object at 0x000001F65A54B490gt; является строковым представлением объекта ORM по умолчанию. Вы можете получить атрибуты (свойства) объекта, используя стандартный синтаксис:

 me = UserMap(user_name="Gord") print(me) # lt;main.UserMap object at 0x000001F65A54B490gt; print(me.user_name) # Gord  

Комментарии:

1. Спасибо! Это отлично сработало, не знаю, что делал пример, если это правильный способ вызова объектов!