ORM框架 和 peewee

数据库和表模型的准备

# /usr/bin/python
# encoding:utf-8

from peewee import *
from datetime import date

# 新建数据库 db
db = SqliteDatabase('people.db')

#表格模型 Person:这是一个Model的概念
class Person(Model):
    #CharField 为抽象数据类型 相当于 varchar
    name = CharField()
    #DateField 相当于 date
    birthday = DateField()
    #BooleanField 相当于 bool
    is_relative = BooleanField()

    # 所用数据库为db
    class Meta:
        database = db

#表格模型 Pet
class Pet(Model):
    #外连接的声明(和Person关联)
    owner = ForeignKeyField(Person, related_name='pets')
    name = CharField()
    animal_type = CharField()

    class Meta:
        database = db
#连接数据库db
db.connect()

在db中建表Person和Pet:

db.create_tables([Person, Pet])

Person 和 Pet表数据操作:

# Storing Data

uncle_bob = Person(name='Bob', birthday=date(1967, 1, 28), is_relative=True)
uncle_bob.save()

grandma = Person.create(name='Grandma', birthday=date(1935, 3, 1), is_relative=True)
herb = Person.create(name='Herb', birthday=date(1950, 5, 1), is_relative=False)

grandma.name = 'Marry'
grandma.save()

bob_kitty = Pet.create(owner=uncle_bob, name='Kitty', animal_type='cat')
herb_fido = Pet.create(owner=herb, name='Fido', animal_type='dog')
herb_mittens = Pet.create(owner=herb, name='Mittens', animal_type='cat')
herb_mittens_jr = Pet.create(owner=herb, name='Mittens Jr', animal_type='cat')

# return the value of delete_instance() is the number of rows removed form the database

# delete Data
herb_mittens.delete_instance()  # he had a great life

# Modify Data
herb_fido.owner = uncle_bob
herb_fido.save()
bob_fido = herb_fido  # rename our variable for clarity

Person,Pet—>Select 操作:

# Retrieving Data

# 查询名字为Marry的person
grandma = Person.select().where(Person.name == 'Marry').get()

#列出Person表中所有的person
for person in Person.select():
    print person.name, person.is_relative

#查询Pet表中animal_type为cat的所有pet
query = (Pet
         .select(Pet, Person)
         .join(Person)
         .where(Pet.animal_type == 'cat'))

for pet in query:
    print pet.name, pet.owner.name

#查询Pet表中主人名为Bob的所有pet
for pet in Pet.select().join(Person).where(Person.name == 'Bob'):
    print pet.name

#查询Pet表中person为uncle_bob的所有pet
for pet in Pet.select().where(Pet.owner == uncle_bob):
    print pet.name

#查询Pet表中person为uncle_bob结果按pet名排列
for pet in Pet.select().where(Pet.owner == uncle_bob).order_by(Pet.name):
    print pet.name

#将Person表中的person按生日降序查询
for person in Person.select().order_by(Person.birthday.desc()):
    print person.name, person.birthday

#查询Person表中person所拥有的pet数量及名字和类型
for person in Person.select():
    print person.name, person.pets.count(), 'pets'
    for pet in person.pets:
        print '      ', pet.name, pet.animal_type

#查询Person表中生日小于1940或大于1960的person
d1940 = date(1940, 1, 1)
d1960 = date(1960, 1, 1)
query = (Person
         .select()
         .where((Person.birthday < d1940) | (Person.birthday > d1960)))

#查询Person表中生日在1940和1960之间的person
for person in query:
    print person.name, person.birthday

query = (Person
         .select()
         .where((Person.birthday > d1940) & (Person.birthday < d1960)))

for person in query:
    print person.name, person.birthday

#按照expression查询person名开头为小写或大写 G 的person
expression = (fn.Lower(fn.Substr(Person.name, 1, 1)) == 'g')
for person in Person.select().where(expression):
    print person.name

Person, Pet—>Update操作

q = User.update(active=False).where(User.registration_expired == True)
q.execute() 

Person, Pet—>Insert操作

q = User.delete().where(User.active == False)
q.execute() 

关闭数据库

db.close()

peewee官方API
peewee数据库接口

猜你喜欢

转载自blog.csdn.net/sinat_33588424/article/details/80748009