Python轻量级ORM框架Peewee访问sqlite数据库的方法详解


Posted in Python onJuly 20, 2017

本文实例讲述了Python轻量级ORM框架Peewee访问sqlite数据库的方法。分享给大家供大家参考,具体如下:

ORM框架就是 object relation model,对象关系模型,用来实现把数据库中的表 映射到 面向对象编程语言中的类,不需要写sql,通过操作对象就能实现 增删改查。

ORM的基本技术有3种:

(1)映射技术

数据类型映射:就是把数据库中的数据类型,映射到编程语言中的数据类型。比如,把数据库的int类型映射到Python中的integer 类型。
类映射:把数据库中的表,映射到面向对象编程语言的类,这样就不用写sql,直接操作对象就可以了。
关系映射:关系型数据库最大的特点在于实体之间的关系,也就是表之间通过主外键的设置,产生的关联,把这种关联映射成编程语言中基于对象引用的关系连接。

(2)CURD技术

CURD就是增加、更新、检索、删除的意思,就是实现了数据库中的增删改查的功能。

(3)缓存技术

把数据库中查询到的数据,以类对象的形式,存储在内存中,用的时候随时提取。

在ORM查询命令中,并不会去查询数据库,而是当真正要读取数据时,才到数据库中去查数据。

一、安装peewee

c:\Python27\Scripts>pip install peewee
Collecting peewee
 Downloading peewee-2.8.5.tar.gz (506kB)
  100% |????????????????????????????????| 512kB 437kB/s
Installing collected packages: peewee
 Running setup.py install for peewee ... done
Successfully installed peewee-2.8.5

二、定义表到类的映射

先把表定义为类,保存为 orm.py,后面的代码会引用这个模块。

代码如下:

# -*- coding:utf8 -*-
from peewee import *
db = SqliteDatabase('test.db')
class BaseModel(Model):
  class Meta:
    database = db
class Course(BaseModel):
  id = PrimaryKeyField()
  title = CharField(null = False)
  period = IntegerField()
  description = CharField()
  class Meta:
    order_by = ('title',)
    db_table = 'course'
class Teacher(BaseModel):
  id = PrimaryKeyField()
  name = CharField(null = False)
  gender = BooleanField()
  address = CharField()
  course_id = ForeignKeyField(Course,to_field='id',related_name = "course")
  class Meta:
    order_by = ('name',)
    db_table = 'teacher'

三、创建表、新增记录

# -*- coding:utf8 -*-
from orm import *
Course.create_table()
Teacher.create_table()
Course.create(id = 1,title='经济学',period = 320,description='文科必修')
Course.create(id = 2,title='大学语文',period = 300,description='所有学科必修')
Course.create(id = 3,title='操作系统',period = 320,description='计算机必修')
Course.create(id = 4,title='马克思主义哲学',period = 320,description='必修')
Teacher.create(id = 1,name = '张三',gender=True,address='...',course_id = 1)
Teacher.create(id = 2,name = '李四',gender=False,address='-',course_id = 2)
Teacher.create(id = 3,name = '王五',gender=True,address='=',course_id = 3)

四、更复杂的操作

# -*- coding:gbk -*-
from orm import *
#获取1行数据
record = Course.get(Course.title=='大学语文')
print("课程:%s ,学时: %d" %(record.title,record.period))
#更新这行数据的period字段,保存
record.period = 200
record.save()
print("学分改为:%d" % record.period)
#获取1行数据,再删除,如果不存在,则会报错
record = Course.get(Course.title=='马克思主义哲学')
record.delete_instance()
###查询所有数据
course = Course.select()
###查询符合条件的数据,排序
course = Course.select().where(Course.id <3).order_by(Course.period.desc())
###计算平均值
total = Course.select(fn.Avg(Course.period)).alias('avg_period')
###更新数据
Course.update(period=300).where(Course.id>2).execute()
###关联数据
Record = Course.select().join(Teacher).where(Teacher.gender == True)

操作完成后,可以用sqlite3 test.db ,然后用命令查看表数据。

希望本文所述对大家Python程序设计有所帮助。

Python 相关文章推荐
在Python中操作时间之strptime()方法的使用
Dec 30 Python
利用python 更新ssh 远程代码 操作远程服务器的实现代码
Feb 08 Python
Window 64位下python3.6.2环境搭建图文教程
Sep 19 Python
Python3爬虫学习之将爬取的信息保存到本地的方法详解
Dec 12 Python
python列表list保留顺序去重的实例
Dec 14 Python
Python把对应格式的csv文件转换成字典类型存储脚本的方法
Feb 12 Python
python图形绘制奥运五环实例讲解
Sep 14 Python
Python序列化pickle模块使用详解
Mar 05 Python
Keras 加载已经训练好的模型进行预测操作
Jun 17 Python
如何利用Python动态模拟太阳系运转
Sep 04 Python
python3使用diagrams绘制架构图的步骤
Apr 08 Python
Keras在mnist上的CNN实践,并且自定义loss函数曲线图操作
May 25 Python
Python函数式编程
Jul 20 #Python
python 换位密码算法的实例详解
Jul 19 #Python
python实现rsa加密实例详解
Jul 19 #Python
Python中标准库OS的常用方法总结大全
Jul 19 #Python
spyder常用快捷键(分享)
Jul 19 #Python
JPype实现在python中调用JAVA的实例
Jul 19 #Python
简单谈谈Python中的json与pickle
Jul 19 #Python
You might like
模拟xcopy的函数
2006/10/09 PHP
ThinkPHP中实例Model方法的区别说明
2010/08/21 PHP
PHP用SAX解析XML的实现代码与问题分析
2011/08/22 PHP
php获取访问者IP地址汇总
2015/04/24 PHP
php+html5基于websocket实现聊天室的方法
2015/07/17 PHP
Zend Framework教程之Zend_Config_Xml用法分析
2016/03/23 PHP
PHP使用token防止表单重复提交的方法
2016/04/07 PHP
Yii视图操作之自定义分页实现方法
2016/07/14 PHP
mouse_on_title.js
2006/08/25 Javascript
extjs DataReader、JsonReader、XmlReader的构造方法
2009/11/07 Javascript
jQuery操作select的实例代码
2012/06/14 Javascript
JS Pro-深入面向对象的程序设计之继承的详解
2013/05/07 Javascript
js实现的tab标签切换效果代码分享
2015/08/25 Javascript
jquery 动态增加删除行的简单实例(推荐)
2016/10/12 Javascript
vue轮播图插件vue-awesome-swiper
2017/11/27 Javascript
ligerUI---ListBox(列表框可移动的实例)
2017/11/28 Javascript
Angular2进阶之如何避免Dom误区
2018/04/02 Javascript
详解react-refetch的使用小例子
2019/02/15 Javascript
JS实现利用闭包判断Dom元素和滚动条的方向示例
2019/08/26 Javascript
Javascript实现html转pdf高清版(提高分辨率)
2020/02/19 Javascript
[48:45]Ti4 循环赛第二日 NEWBEE vs EG
2014/07/11 DOTA
在Python的Django框架中实现Hacker News的一些功能
2015/04/17 Python
详解Python3中的Sequence type的使用
2015/08/01 Python
Python探索之pLSA实现代码
2017/10/25 Python
python matplotlib中文显示参数设置解析
2017/12/15 Python
python读取图片并修改格式与大小的方法
2018/07/24 Python
ubuntu16.04制作vim和python3的开发环境
2018/09/23 Python
python 缺失值处理的方法(Imputation)
2019/07/02 Python
HTML5拖拽的简单实例
2016/05/30 HTML / CSS
End Clothing美国站:英国男士潮牌商城
2018/04/20 全球购物
上海方立数码笔试题
2013/10/18 面试题
职工运动会邀请函
2014/02/02 职场文书
法制宣传教育方案
2014/05/09 职场文书
法制教育演讲稿
2014/09/10 职场文书
单位委托函范文
2015/01/29 职场文书
深入理解python多线程编程
2021/04/18 Python