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发送伪造的arp请求
Jan 09 Python
在Linux命令行终端中使用python的简单方法(推荐)
Jan 23 Python
python的numpy模块安装不成功简单解决方法总结
Dec 23 Python
一篇文章快速了解Python的GIL
Jan 12 Python
Python常见字典内建函数用法示例
May 14 Python
Django之编辑时根据条件跳转回原页面的方法
Aug 21 Python
Python超越函数积分运算以及绘图实现代码
Nov 20 Python
Python+Redis实现布隆过滤器
Dec 08 Python
keras load model时出现Missing Layer错误的解决方式
Jun 11 Python
详解Python中第三方库Faker
Sep 25 Python
Python: glob匹配文件的操作
Dec 11 Python
Python+Appium实现自动抢微信红包
May 21 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访问MYSQL数据库封装类(附函数说明)
2010/12/04 PHP
PHP中date()日期函数有关参数整理
2011/07/19 PHP
PHP计数器的实现代码
2013/06/08 PHP
Laravel框架路由配置总结、设置技巧大全
2014/09/03 PHP
php+html5+ajax实现上传图片的方法
2016/05/14 PHP
php+ajax登录跳转登录实现思路
2016/07/31 PHP
Ajax和PHP正则表达式验证表单及验证码
2016/09/24 PHP
对PHP依赖注入的理解实例分析
2016/10/09 PHP
JavaScript 学习点滴记录
2009/04/24 Javascript
jquery Moblie入门—hello world的示例代码学习
2013/01/08 Javascript
Javascript中对象继承的实现小例
2014/05/12 Javascript
基于touch.js手势库+zepto.js插件开发图片查看器(滑动、缩放、双击缩放)
2016/11/17 Javascript
Javascript中关于Array.filter()的妙用详解
2016/12/04 Javascript
AngularJS基于ngInfiniteScroll实现下拉滚动加载的方法
2016/12/14 Javascript
JavaScript分步实现一个出生日期的正则表达式
2018/03/22 Javascript
深入理解Promise.all
2018/08/08 Javascript
Vue项目总结之webpack常规打包优化方案
2019/06/06 Javascript
django中使用vue.js的要点总结
2019/07/07 Javascript
Vue 通过公共字段,拼接两个对象数组的实例
2019/11/07 Javascript
2020京东618叠蛋糕js脚本(亲测好用)
2020/06/02 Javascript
[01:31](回顾)杀出重围,决战TI之巅
2014/07/01 DOTA
[03:01]2014DOTA2国际邀请赛 DC:我是核弹粉,为Burning和国土祝福
2014/07/13 DOTA
python文件读写并使用mysql批量插入示例分享(python操作mysql)
2014/02/17 Python
Django使用HttpResponse返回图片并显示的方法
2018/05/22 Python
Python实现简单的文本相似度分析操作详解
2018/06/16 Python
Python列表list排列组合操作示例
2018/12/18 Python
Python 实现数据结构中的的栈队列
2019/05/16 Python
新手入门Python编程的8个实用建议
2019/07/12 Python
Win10+GPU版Pytorch1.1安装的安装步骤
2019/09/27 Python
Python 给下载文件显示进度条和下载时间的实现
2020/04/02 Python
django数据模型中null和blank的区别说明
2020/09/02 Python
.NET初级开发工程师面试题
2014/04/18 面试题
公安个人四风问题对照检查及整改措施
2014/10/28 职场文书
寒假安全保证书
2015/02/28 职场文书
幼儿园综治宣传月活动总结
2015/05/07 职场文书
医学会议开幕词
2016/03/03 职场文书