Peewee 小结 2018-12-11

2018-12-11  本文已影响0人  My_ANGEL

# 当我们使用外健关系建立模型之间的关系时,事情变得有趣。这对peewee来说很简单:

class Pet(Model):

owner = ForeignkeyField(Person, backref='pets')

name = CharField()

aninal_type = CharField()

class Meta:

database = db # this model uses the "people,.db" database

储存数据:

让我们从一些人的填充数据库开始。我们将使用save()和create()方法添加和更新人们的记录。

from datetime import date

uncle_bob = Person(name='Bob', birthday=date(1992, 8, 29))

uncle_bob.save() # bob is now stored in the database

# Retuen: 1

# !! 调用save(),将返回修改的行数。

george = Person.create(name='George', birthday=date(1994, 8, 18))

lebron = Person.create(name='lebron', birthday=date(1987, 12, 30))

要更新行,请修改模型实例并调用save()以保留更改。 在这里将更改George的名称,然后将更改后的名字保存在数据库中:

george.name = 'George L.'

george.save()  # Update george's name in the database.

# Return: 1

# 在数据库中加一些动物🐒

bob_kitty = Pet.create(owner=uncle_bob, name='Kitty', animal_type='cat')

lebron_fido = Pet.create(owner=lebron, name='Fido' animal_type='dog')

lebrom_mittens = Pet.create(owner=lebron, name='Mittens', animal_type='cat')

lebrom_mittens_jr = Pet.create(owner=lebron, name='Mittens_jr', animal_type='cat')

经过长时间的生命,米腾斯病了并且死了。我们需要将它从数据库中删除掉:

lebrom_mittens.delete_intance() # he had a great life

# Returns: 1

注意 :返回值delete_instance()是从数据库中删除的行数。

lebron_fido.owner = uncle_bob

lebron_fido.save()

要从数据库中获取单个记录,请使用select.get():

george = Person.select().where(Person.name == 'george L.').get()

我们也可以使用等效的简写Model.get():

george = Person.get(Person.name == 'George L.')

让我们列出数据库中所有的人:

fro Person in Person.select():

prints(person.name)

# prints:

#Bob

#george L.

#Herb

让我们列出所有猫及其主人的名字:

query = Pet.select().where(Pet.animal_type == 'cat')

for pet in query:

print(pet.name, pet.owner.name)

# prints:

# kitty Bob

# Mittens Jr lebron

query = (Pet

.selcet(Pet, Person)

.join(Pet.animal_type == 'cat'))

for pet in query:

print(pet.name, pet.owner.name)

# prints:

#Kitty Bob

#Mittens Jr lebron

让我们得到鲍勃拥有的所有宠物:

for pet in pet .select().join(person).where(person.name == 'Bob'):

print(pet.name)

# prints:

# kitty

# fido

我们可以在这里做另一件很酷的事情来获得鲍勃的宠物。由于我们已经有了一个代表鲍勃的对象,我们可以这样做:

for pet in Pet.select().where(Pet.owner == uncle_bob):

print(pet.name)

排序:让我们添加一个order_by()子句确保按字母对它们进行排序:

for pet in Pet.select().where(Pet.owner == uncle_bob).order_by(Pet.name):

print(pet.name)

# prints:

# Fido

# kitty

我们现在列出所有人, 最年轻到最老的人:

for person in Person.select().order_by(Person.birthday.desc()):

print(person.name, person.birthday)

# prints:

# george 1994-08-18

# Bob 1992-08-29

# lebron 1987-12-30

最后一个问题。使用SQL函数查找名称以大小或者写G开头的所有人:

expression = fn.Lower(fn.Substr(person.name, 1, 1)) == 'g'

fro person in person.select().where(expression):

print(person.name)

# prints:

# george L.

上一篇下一篇

猜你喜欢

热点阅读