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中操作文件之seek()方法的使用教程
May 24 Python
用python与文件进行交互的方法
Mar 01 Python
利用Python实现在同一网络中的本地文件共享方法
Jun 04 Python
Python 实现交换矩阵的行示例
Jun 26 Python
python 画二维、三维点之间的线段实现方法
Jul 07 Python
利用python在大量数据文件下删除某一行的例子
Aug 21 Python
python自动化UI工具发送QQ消息的实例
Aug 27 Python
Python递归函数特点及原理解析
Mar 04 Python
python实现梯度法 python最速下降法
Mar 24 Python
Python迭代器协议及for循环工作机制详解
Jul 14 Python
python pillow库的基础使用教程
Jan 13 Python
numpy array找出符合条件的数并赋值的示例代码
Jun 01 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操作MongoDB时的整数问题及对策说明
2011/05/02 PHP
ThinkPHP CURD方法之field方法详解
2014/06/18 PHP
ThinkPHP让分页保持搜索状态的方法
2014/07/02 PHP
phpmyadmin中禁止外网使用的方法
2014/11/04 PHP
10条php编程小技巧
2015/07/07 PHP
PHP微信开发之查询微信精选文章
2016/06/23 PHP
PHP实现获取url地址中顶级域名的方法示例
2019/06/05 PHP
JQuery slideshow的一个小问题(如何发现及解决过程)
2013/02/06 Javascript
javascript将相对路径转绝对路径示例
2014/03/14 Javascript
单击和双击事件的冲突处理示例代码
2014/04/03 Javascript
JSONP之我见
2015/03/24 Javascript
详解AngularJS中的依赖注入机制
2015/06/17 Javascript
AngularJs IE Compatibility 兼容老版本IE
2016/09/01 Javascript
使用bootstrap实现多窗口和拖动效果
2016/09/22 Javascript
原生JS实现圆环拖拽效果
2017/04/07 Javascript
javascript数据结构之串的概念与用法分析
2017/04/12 Javascript
原生JS实现图片懒加载(lazyload)实例
2017/06/13 Javascript
基于angular2 的 http服务封装的实例代码
2017/06/29 Javascript
微信小程序使用modal组件弹出对话框功能示例
2017/11/29 Javascript
Angular5中调用第三方js插件的方法
2018/02/26 Javascript
浅谈layui里的上传控件问题
2019/09/26 Javascript
详解字典树Trie结构及其Python代码实现
2016/06/03 Python
python结合selenium获取XX省交通违章数据的实现思路及代码
2016/06/26 Python
pymongo中group by的操作方法教程
2019/03/22 Python
Python中format()格式输出全解
2019/04/12 Python
如何使用Python自动控制windows桌面
2019/07/11 Python
python模拟鼠标点击和键盘输入的操作
2019/08/04 Python
基于tensorflow指定GPU运行及GPU资源分配的几种方式小结
2020/02/03 Python
pycharm通过ssh连接远程服务器教程
2020/02/12 Python
在Ubuntu中安装并配置Pycharm教程的实现方法
2021/01/06 Python
html5音频_动力节点Java学院整理
2018/08/22 HTML / CSS
会计专业毕业生求职信分享
2014/01/03 职场文书
教师应聘自荐信范文
2014/03/14 职场文书
赵乐秦在党的群众路线教育实践活动总结大会上的讲话稿
2014/10/25 职场文书
技能培训通讯稿
2015/07/18 职场文书
Vue和Flask通信的实现
2021/05/19 Vue.js