MyTetra Share
Делитесь знаниями!
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()

```

Так же в этом разделе:
 
MyTetra Share v.0.59
Яндекс индекс цитирования