数据库和表模型的准备
# /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()