Flask-SQLAlchemy - получить Query.all () - все столбцы в каждой строке - PullRequest
1 голос
/ 28 апреля 2019

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

Я хочу напечатать () все значения столбцов для строки, полученной с помощью 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"}

1 Ответ

0 голосов
/ 28 апреля 2019

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}>"
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...