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 相关文章推荐
wxPython中listbox用法实例详解
Jun 01 Python
Python装饰器入门学习教程(九步学习)
Jan 28 Python
深入理解python中的浅拷贝和深拷贝
May 30 Python
Python使用自带的ConfigParser模块读写ini配置文件
Jun 26 Python
Python wxPython库消息对话框MessageDialog用法示例
Sep 03 Python
python实现简单http服务器功能
Sep 17 Python
python paramiko利用sftp上传目录到远程的实例
Jan 03 Python
Python之时间和日期使用小结
Feb 14 Python
Python函数和模块的使用总结
May 20 Python
Python传递参数的多种方式(小结)
Sep 18 Python
python列表删除和多重循环退出原理详解
Mar 26 Python
python 比较字典value的最大值的几种方法
Apr 17 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
用PHP和ACCESS写聊天室(九)
2006/10/09 PHP
PHP中读写文件实现代码
2011/10/20 PHP
PHP Callable强制指定回调类型的方法
2016/08/30 PHP
通过chrome浏览器控制台(Console)进行PHP Debug的方法
2016/10/19 PHP
PHP fopen函数用法实例讲解
2019/02/15 PHP
不能再简单的无闪刷新验证码原理很简单
2007/11/05 Javascript
jquery 插件学习(三)
2012/08/06 Javascript
当鼠标滑过文本框自动选中输入框内容的JS代码分享
2013/11/26 Javascript
清除div下面的所有标签的方法
2014/02/17 Javascript
js unicode 编码解析关于数据转换为中文的两种方法
2014/04/21 Javascript
JS函数重载的解决方案
2014/05/13 Javascript
网页中表单按回车就自动提交的问题的解决方案
2014/11/03 Javascript
javascript实现获取服务器时间
2015/05/19 Javascript
JavaScript图片轮播代码分享
2015/07/31 Javascript
js选项卡的制作方法
2017/01/23 Javascript
JS中的phototype详解
2017/02/04 Javascript
微信小程序 图片绝对定位(背景图片)
2017/04/05 Javascript
浅谈Angular路由复用策略
2017/10/04 Javascript
纯JS开发baguetteBox.js响应式画廊插件
2020/06/28 Javascript
[14:19]2018年度COSER大赛-完美盛典
2018/12/16 DOTA
python在Windows下安装setuptools(easy_install工具)步骤详解
2016/07/01 Python
selenium + python 获取table数据的示例讲解
2018/10/13 Python
Python 支持向量机分类器的实现
2020/01/15 Python
使用celery和Django处理异步任务的流程分析
2020/02/19 Python
Python爬虫使用bs4方法实现数据解析
2020/08/25 Python
一篇文章搞懂python的转义字符及用法
2020/09/03 Python
从当地商店送来的杂货:Instacart
2018/08/19 全球购物
财务人员个人自荐信范文
2013/09/26 职场文书
室内设计专业个人的自我评价
2013/10/19 职场文书
2014学校庆三八妇女节活动总结
2014/03/01 职场文书
担保书格式及范文
2014/04/01 职场文书
九九重阳节致辞
2015/07/31 职场文书
如何用python识别滑块验证码中的缺口
2021/04/01 Python
使用python+pygame开发消消乐游戏附完整源码
2021/06/10 Python
一文了解JavaScript用Element Traversal新属性遍历子元素
2021/11/27 Javascript
B站评分公认最好看的动漫,你的名字评分9.9,第六备受喜欢
2022/03/18 日漫