Python中peewee模塊

Python中peewee模塊,有須要的朋友能夠參考下。python


前言關於ORM框架:linux

簡介:數據庫

對象關係映射(英語:Object Relational Mapping,簡稱ORM,或O/RM,或O/R mapping),是一種程序技術,用於實現面向對象編程語言裏不一樣類型系統的數據之間的轉換。從效果上說,它實際上是建立了一個可在編程語言裏使用的「虛擬對象數據庫」。express

對象關係映射(Object-Relational Mapping)提供了概念性的、易於理解的模型化數據的方法。ORM方法論基於三個核心原則: 簡單:以最基本的形式建模數據。 傳達性:數據庫結構被任何人都能理解的語言文檔化。 精確性:基於數據模型建立正確標準化了的結構。 典型地,建模者經過收集來自那些熟悉應用程序但不熟練的數據建模者的人的信息開發信息模型。建模者必須可以用非技術企業專家能夠理解的術語在概念層次上與數據結構進行通信。建模者也必須能以簡單的單元分析信息,對樣本數據進行處理。ORM專門被設計爲改進這種聯繫。編程

ORM優點:windows

1.隱藏了數據訪問細節,「封閉」的通用數據庫交互,ORM的核心。他使得咱們的通用數據庫交互變得簡單易行,而且徹底不用考慮該死的SQL語句。快速開發,由此而來。數據結構

2.在ORM年表的史前時代,咱們須要將咱們的對象模型轉化爲一條一條的SQL語句,經過直連或是DB helper在關係數據庫構造咱們的數據庫體系。而如今,基本上全部的ORM框架都提供了經過對象模型構造關係數據庫結構的功能。app

peewee模塊(輕量級python中的ORM)1.安裝peewee模塊:框架

(Ps:首先安裝好pip,才能夠執行如下命令安裝)
linux :
編程語言

sudo pip install peewee
windows:cmd下輸入:

pip install peewee

2.peewee代碼實例:數據庫和表模型的準備:

# /usr/bin/python
# encoding:utf-8
from peewee import *from datetime
import date
# 新建數據庫
dbdb = 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
#鏈接數據庫
dbdb.connect()
在db中建表Person和Pet:
db.create_tables([Person, Pet])
Person 和 Pet表數據操做:
# Storing
Datauncle_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
Dataherb_mittens.delete_instance() 
# he had a great life
# Modify
Dataherb_fido.owner = uncle_bobherb_fido.save()
bob_fido = herb_fido 
# rename our variable for clarityPerson,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.namePerson, Pet—>Update
操做q = User.update(active=False).where(User.registration_expired == True)q.execute()Person, Pet—>Insert
操做q = User.insert(username='admin', active=True, registration_expired=False)q.execute()Person, Pet—>Delete
操做q = User.delete().where(User.active == False)q.execute()
關閉數據庫db.close()
總結

關於peewee還有不少具體的東西,我這裏只羅列了一些基本的操做,開發過程當中須要瞭解更多的內容,請參照peewee官方API,見:peeweeAPI

相關文章
相關標籤/搜索