|
|||||||
4. Выборка из БД с использованием peewee
Время создания: 08.05.2017 09:56
Раздел: Python - Модули - peewee
Запись: xintrea/mytetra_db_mcold/master/base/14942266118x5p5mzw5j/text.html на raw.githubusercontent.com
|
|||||||
|
|||||||
> Выборки выполняются прямо с объектом класса и возвращают экземпляры SelectQuery (аналог QuerySet в джанге). Извлечение одной записи Для извлечения одной записи используйте метод SelectQuery.get(): grandma = Person.select().where(Person.name == 'Grandma L.').get() grandma = Person.get(Person.name == 'Grandma L.') Запрос можно сократить, подставив аргумент напрямую в get(): ```python grandma = Person.get(Person.name == 'Grandma L.') ``` Извлечение нескольких записей Пройдемся по всем экземплярам Person циклом: ```python for person in Person.select(): ... print person.name, person.is_relative ... Bob True Grandma L. True Herb False ``` Пройдемся по экземплярам Person и по всем связанным с ними записями: ```python for person in Person.select(): ... print person.name, person.pets.count(), 'pets' ... for pet in person.pets: ... print ' ', pet.name, pet.animal_type ... Bob 2 pets Kitty cat Fido dog Grandma L. 0 pets Herb 1 pets Mittens Jr cat ``` Выловим всех кошек и их хозяев людей (или наоборот?): ```python for pet in Pet.select().where(Pet.animal_type == 'cat'): ... print pet.name, pet.owner.name ... Kitty Bob Mittens Jr Herb ``` Не без join'ов: ```python for pet in Pet.select().join(Person).where(Person.name == 'Bob'): ... print pet.name ... Kitty Fido Извлечь ту же выборку можно и по-другому – явно передав объект с Бобом в запрос: ```python for pet in Pet.select().where(Pet.owner == uncle_bob): ... print pet.name ``` Упорядочим выборку в алфавитном порядке. Для этого воспользуемся методом SelectQuery.order_by(): ```python for pet in Pet.select().where(Pet.owner == uncle_bob).order_by(Pet.name): ... print pet.name ... Fido Kitty ``` Упорядочим людей по возрасту: ```python for person in Person.select().order_by(Person.birthday.desc()): ... print person.name ... Bob Herb Grandma L. ``` Давайте попробуем более сложный запрос. Выберем всех людей, родившихся до 1940 после 1959 ```python d1940 = date(1940, 1, 1) >>> d1960 = date(1960, 1, 1) >>> for person in Person.select().where((Person.birthday < d1940) | (Person.birthday > d1960)): ... print person.name ... Bob Grandma L. ``` Хинт А теперь торобоан. Выберем тех, кто родился между 1940 и 1960: ```python for person in Person.select().where((Person.birthday > d1940) & (Person.birthday < d1960)): ... print person.name ... Herb ``` And one last thing. Воспользуемся SQL-функцией и выберем всех людей, чьё имя начинается с «G» в любом регистре: ```python for person in Person.select().where(fn.Lower(fn.Substr(Person.name, 1, 1)) == 'g'): ... print person.name ... Grandma L. ``` Для выборок также используйте методы: ```python SelectQuery.group_by() SelectQuery.having() SelectQuery.limit() и SelectQuery.offset() ``` |
|||||||
Так же в этом разделе:
|
|||||||
|
|||||||
|