#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. Спасибо! Это отлично сработало, не знаю, что делал пример, если это правильный способ вызова объектов!