Flask-SQLAlchemy — получить Query.all () — все столбцы в каждой строке

Я запускаю приложение Flask с flask_SQLAlchemy и БД Postgres.

Я хочу напечатать() все значения столбцов для строки, полученной с помощью query.all()

Я прочитал этот документ, но мне не удалось получить то, что я ищу. https://docs.sqlalchemy.org/en/13/orm/query.html Хотя я новичок в алхимии.

# the class model
class Users(db.Model):
    __tablename__ = "users"
    id = db.Column(db.Integer, primary_key=True)
    username = db.Column(db.String, nullable=False)
    hash = db.Column(db.String, nullable=False)
    reg_date = db.Column(db.DateTime, nullable=False)
    enabled = db.Column(db.Boolean, nullable=False

# Query all users
users = Users.query.all()

# try to iterate
for row in users:
    print(row.all())
actual results:
before loop: 
    >>> <Users 1>, <Users 2>, <Users 3>, <Users 4>
after loop: 
    >>> error all() doesn't apply to row

expected result, not achieved:
    >>>
    {id = "1", username = "yyy", hash = "xxx", reg_date"zzz", enabled"yyy"}   
    ....
    {id = "n", username = "ttt", hash = "nnn", reg_date"jjjj", enabled"oooo"}
Почему в Python есть оператор "pass"?
Почему в Python есть оператор "pass"?
Оператор pass в Python - это простая концепция, которую могут быстро освоить даже новички без опыта программирования.
Некоторые методы, о которых вы не знали, что они существуют в Python
Некоторые методы, о которых вы не знали, что они существуют в Python
Python - самый известный и самый простой в изучении язык в наши дни. Имея широкий спектр применения в области машинного обучения, Data Science,...
Основы Python Часть I
Основы Python Часть I
Вы когда-нибудь задумывались, почему в программах на Python вы видите приведенный ниже код?
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
LeetCode - 1579. Удаление максимального числа ребер для сохранения полной проходимости графа
Алиса и Боб имеют неориентированный граф из n узлов и трех типов ребер:
Оптимизация кода с помощью тернарного оператора Python
Оптимизация кода с помощью тернарного оператора Python
И последнее, что мы хотели бы показать вам, прежде чем двигаться дальше, это
Советы по эффективной веб-разработке с помощью Python
Советы по эффективной веб-разработке с помощью Python
Как веб-разработчик, Python может стать мощным инструментом для создания эффективных и масштабируемых веб-приложений.
3
0
14 364
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

all используется один раз для получения всех записей, затем вы должны использовать имена столбцов для отображения или чего-либо еще, что вы хотели бы сделать:

users = Users.query.all()

for user in users:
    print(user.username)
    print(user.reg_date)
    print(f"<id = {user.id}, username = {user.username}>")

Чтобы достичь желаемого результата, то есть распечатать список всех пользователей, вы можете распечатать переменную users:

print(users)

Обратите внимание, что список users содержит объекты Users, поэтому при печати списка их представление фактически сбрасывается, и если вы хотите управлять отображением этих объектов, вы можете использовать метод __repr__ внутри вашей модели Users (объекта):

def __repr__(self):
   return f"<id = {self.id}, username = {self.username}>"

Привет спасибо. Я добавил функцию репр, и она работает для отдельной конфигурации, позволяя видеть ключи и выбранное представление. Однако для этого требуется отредактировать структуру класса. Я ищу метод (или другой способ) для доступа к ВСЕ содержимому объекта User, полученному без предварительной настройки. Возможно?

guruhitech 29.04.2019 12:17

Да, вы можете просмотреть каждый объект и распечатать все его свойства, взгляните на раздел циклов обновленного ответа.

AdamGold 29.04.2019 14:05

спасибо, это достигается за счет явного объявления каждой пары ключей. Я просто хотел бы добиться того же результата без явного запроса для каждого столбца или ключа в каждой строке; но распечатайте ВСЕ результаты из каждого полученного объекта.

guruhitech 30.04.2019 06:33

Попробуйте print(user.__dict__) внутри вашего цикла for.

AdamGold 30.04.2019 14:29

спасибо, в точку! прекрасно работает. Также я понял, что: user.username == (user.__dict__['username']).

guruhitech 02.05.2019 01:58

Другие вопросы по теме