Python中peewee模块

Python中peewee模块,有需要的朋友可以参考下。

前言关于ORM框架:

简介:

对象关系映射(英语:Object Relational Mapping,简称ORM,或O/RM,或O/R mapping),是一种程序技术,用于实现面向对象编程语言里不同类型系统的数据之间的转换。从效果上说,它其实是创建了一个可在编程语言里使用的“虚拟对象数据库”。

对象关系映射(Object-Relational Mapping)提供了概念性的、易于理解的模型化数据的方法。ORM方法论基于三个核心原则: 简单:以最基本的形式建模数据。 传达性:数据库结构被任何人都能理解的语言文档化。 精确性:基于数据模型创建正确标准化了的结构。 典型地,建模者通过收集来自那些熟悉应用程序但不熟练的数据建模者的人的信息开发信息模型。建模者必须能够用非技术企业专家可以理解的术语在概念层次上与数据结构进行通讯。建模者也必须能以简单的单元分析信息,对样本数据进行处理。ORM专门被设计为改进这种联系。

ORM优势:

1.隐藏了数据访问细节,“封闭”的通用数据库交互,ORM的核心。他使得我们的通用数据库交互变得简单易行,并且完全不用考虑该死的SQL语句。快速开发,由此而来。

2.在ORM年表的史前时代,我们需要将我们的对象模型转化为一条一条的SQL语句,通过直连或是DB helper在关系数据库构造我们的数据库体系。而现在,基本上所有的ORM框架都提供了通过对象模型构造关系数据库结构的功能。

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

时间: 07-18

Python中peewee模块的相关文章

Python中time模块详解

在Python中,与时间处理有关的模块就包括:time,datetime以及calendar.这篇文章,主要讲解time模块. 在开始之前,首先要说明这几点: 在Python中,通常有这几种方式来表示时间:1)时间戳 2)格式化的时间字符串 3)元组(struct_time)共九个元素.由于Python的time模块实现主要调用C库,所以各个平台可能有所不同. UTC(Coordinated Universal Time,世界协调时)亦即格林威治天文时间,世界标准时间.在中国为UTC+8.DST

Python中ConfigParser模块应用

Python中ConfigParser模块应用 Python的ConfigParser模块定义了3个对INI文件进行操作的类 RawConfigParser,ConfigParser和SafeConfigParser.其中RawCnfigParser是最基础的INI文件读取类,ConfigParser.SafeConfigParser支持对%(value)s变量的解析. 下面看看怎样通过ConfigParser类来解析一个ini文件. 配置文件settings.cfg [DEFAULT] myk

python中的模块安装

python中的模块研究: 需要用import导入的模块都是用python实现的. 内建的部分是用c.c++实现的. pypi:第三方的python包. 在windows上安装python: 1.安装python到C:\PythonXX,添加系统环境变量path:C:\PythonXX. 安装pypi库的方法三种方法: 1.在pypi上下载安装包离线安装 cd  $package-dir python   setup.py  install 在windos的cmd上也可以这样安装. 3.用eas

python中threading模块详解(一)

python中threading模块详解(一) 来源 http://blog.chinaunix.net/uid-27571599-id-3484048.html threading提供了一个比thread模块更高层的API来提供线程的并发性.这些线程并发运行并共享内存. 下面来看threading模块的具体用法: 一.Thread的使用 目标函数可以实例化一个Thread对象,每个Thread对象代表着一个线程,可以通过start()方法,开始运行. 这里对使用多线程并发,和不适用多线程并发做

Python中optionParser模块的使用方法[转]

本文以实例形式较为详尽的讲述了Python中optionParser模块的使用方法,对于深入学习Python有很好的借鉴价值.分享给大家供大家参考之用.具体分析如下: 一般来说,Python中有两个内建的模块用于处理命令行参数: 一个是 getopt,<Deep in python>一书中也有提到,只能简单处理 命令行参数: 另一个是 optparse,它功能强大,而且易于使用,可以方便地生成标准的.符合Unix/Posix 规范的命令行说明. 示例如下: ? 1 2 3 4 5 6 7 8

【转】关于python中re模块split方法的使用

注:最近在研究文本处理,需要用到正则切割文本,所以收索到了这篇文章,很有用,谢谢原作者. 原址:http://blog.sciencenet.cn/blog-314114-775285.html 关于python中re模块split方法的使用 已有 3094 次阅读 2014-3-12 11:30 |系统分类:科研笔记 今天在写一段小代码的时候需要用到re.split()方法,在使用的过程中发现了一个以前不知道的新用法,发现这个用法还是挺实用的,就把它记录下来: >>> m = re.s

python中MySQLdb模块用法实例

篇文章主要介绍了python中MySQLdb模块用法,以实例形式详细讲述了MySQLdb模块针对MySQL数据库的各种常见操作方法,非常具有实用价值,需要的朋友可以参考下 本文实例讲述了python中MySQLdb模块用法.分享给大家供大家参考.具体用法分析如下: MySQLdb其实有点像php或asp中连接数据库的一个模式了,只是MySQLdb是针对mysql连接了接口,我们可以在python中连接MySQLdb来实现数据的各种操作. python连接mysql的方案有oursql.PyMyS

Python中的模块介绍和使用

在Python中有一个概念叫做模块(module),这个和C语言中的头文件以及Java中的包很类似,比如在Python中要调用sqrt函数,必须用import关键字引入math这个模块,下面就来了解一下Python中的模块. 说的通俗点:模块就好比是工具包,要想使用这个工具包中的工具(就好比函数),就需要导入这个模块 1.import 在Python中用关键字import来引入某个模块,比如要引用模块math,就可以在文件最开始的地方用import math来引入. 形如: importmodu

python中os模块中文帮助

python中os模块中文帮助 python中os模块中文帮助文档文章分类:Python编程 python中os模块中文帮助文档 翻译者:butalnd 翻译于2010.1.7——2010.1.8,个人博客:http://butlandblog.appspot.com/ 注此模块中关于unix中的函数大部分都被略过,翻译主要针对WINDOWS,翻译速度很快,其中很多不足之处请多多包涵. 这个模块提供了一个轻便的方法使用要依赖操作系统的功能. 如何你只是想读或写文件,请使用open() ,如果你想