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使用正则搜索字符串或文件中的浮点数代码实例
Jul 11 Python
Python中模块string.py详解
Mar 12 Python
python实现日常记账本小程序
Mar 10 Python
Java实现的执行python脚本工具类示例【使用jython.jar】
Mar 29 Python
在Python中实现shuffle给列表洗牌
Nov 08 Python
Python参数解析模块sys、getopt、argparse使用与对比分析
Apr 02 Python
pyinstaller打包单个exe后无法执行错误的解决方法
Jun 21 Python
python实现七段数码管和倒计时效果
Nov 23 Python
Python基础之函数原理与应用实例详解
Jan 03 Python
Python如何使用turtle库绘制图形
Feb 26 Python
python+adb+monkey实现Rom稳定性测试详解
Apr 23 Python
python实现数字炸弹游戏
Jul 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 CURL模拟GET及POST函数代码
2010/04/25 PHP
解析array splice的移除数组中指定键的值,返回一个新的数组
2013/07/02 PHP
Array, Array Constructor, for in loop, typeof, instanceOf
2011/09/13 Javascript
JavaScript面向对象知识串结(读JavaScript高级程序设计(第三版))
2012/07/17 Javascript
javascript的offset、client、scroll使用方法详解
2012/12/25 Javascript
js实现全屏漂浮广告移入光标停止移动
2013/12/02 Javascript
js+css 实现遮罩居中弹出层(随浏览器窗口滚动条滚动)
2013/12/11 Javascript
document.forms[].submit()使用介绍
2014/02/19 Javascript
用jQuery实现的智能隐藏、滑动效果的返回顶部代码
2014/03/18 Javascript
js propertychange和oninput事件
2014/09/28 Javascript
仅30行代码实现Javascript中的MVC
2016/02/15 Javascript
JS跨域解决方案之使用CORS实现跨域
2016/04/14 Javascript
jQuery ui autocomplete选择列表被Bootstrap模态窗遮挡的完美解决方法
2016/09/23 Javascript
jQuery将表单序列化成一个Object对象的实例
2016/11/29 Javascript
用jQuery实现优酷首页轮播图
2017/01/09 Javascript
javascript事件的绑定基础实例讲解(34)
2017/02/14 Javascript
angularjs的select使用及默认选中设置
2017/04/08 Javascript
重置Redux的状态数据的方法实现
2019/11/18 Javascript
使用 Jest 和 Supertest 进行接口端点测试实例详解
2020/04/25 Javascript
python中seaborn包常用图形使用详解
2019/11/25 Python
python用opencv完成图像分割并进行目标物的提取
2020/05/25 Python
python中upper是做什么用的
2020/07/20 Python
如何基于Python和Flask编写Prometheus监控
2020/11/25 Python
一款纯css3实现的tab选项卡的实列教程
2014/12/11 HTML / CSS
CSS3常用的几种颜色渐变模式总结
2016/11/18 HTML / CSS
英国领先的大码时装品牌之一:Elvi
2018/08/26 全球购物
学生出入校管理制度
2014/01/16 职场文书
公司接待方案
2014/03/08 职场文书
品牌宣传方案
2014/03/21 职场文书
端午节演讲稿
2014/05/23 职场文书
新农村建设汇报材料
2014/08/15 职场文书
小学生迎国庆演讲稿
2014/09/05 职场文书
领导干部遵守党的政治纪律情况思想汇报
2014/09/14 职场文书
英文版辞职信
2015/02/28 职场文书
中学图书馆工作总结
2015/08/11 职场文书
社区服务理念口号
2015/12/25 职场文书