Почему бы мне не получить распечатанный список для некоторых методов ORM в SQLAlchemy? - PullRequest
1 голос
/ 29 сентября 2019

Итак, я просто пытаюсь понять вывод методов SQLAlchemy ORM после создания модели, фиксации некоторых записей и выполнения запросов.Большинство запросов в порядке ... Я получаю список обратно, но для некоторых он просто возвращает объект (см. Ниже).Я знаю, это звучит очевидно, но это нормальное поведение?Я имею в виду запрос filter_by, как вы можете видеть ниже ...

#sample_app.py
from flask import Flask
from flask_sqlalchemy import SQLAlchemy 

app=Flask(__name__)
app.config['SQLALCHEMY_DATABASE_URI']='...'
db = SQLAlchemy(app)

class Person(db.Model):
    __tablename__='persons'
    id = db.Column(db.Integer, primary_key=True)
    name = db.Column(db.String(), nullable=False)

    def __repr__(self):
        return f'<Person Id: {self.id}, name: {self.name}>'

db.create_all()

#Run some basic commands in interactive mode with model already populated
    python3 
    from sample_app import db,Person

#add a bunch of persons 
    person1=Person(name='Amy')
    person2=...
    db.session.add(person1)
    db.session.commit()
    ...
#Run queries
    Person.query.all() #returns all persons as a list
    Person.query.first() #returns first item in the list 
    Person.query.filter_by(name='Amy') 
#returns <flask_sqlalchemy.Basequery object at 0xsadfjasdfsd>

Так почему я не получаю такой же тип вывода для третьего запроса для 'Amy«?это нормальное поведение для метода filter_by?

Спасибо

1 Ответ

1 голос
/ 29 сентября 2019

Вы не выполнили запрос в последнем примере.Метод all возвращает все объекты, выбранные запросом, первый - первый.Вы указали фильтр в последнем примере, но не выполнили метод, который обрабатывает запрос и возвращает результат [set].

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...