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 相关文章推荐
python3实现暴力穷举博客园密码
Jun 19 Python
Python语言的变量认识及操作方法
Feb 11 Python
Python解决八皇后问题示例
Apr 22 Python
使用Python的Django和layim实现即时通讯的方法
May 25 Python
python针对不定分隔符切割提取字符串的方法
Oct 26 Python
python实现两张图片的像素融合
Feb 23 Python
学习python的前途 python挣钱
Feb 27 Python
python绘制直方图和密度图的实例
Jul 08 Python
python 使用装饰器并记录log的示例代码
Jul 12 Python
Python函数装饰器原理与用法详解
Aug 16 Python
Python底层封装实现方法详解
Jan 22 Python
详解Python 函数参数的拆解
Sep 02 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 面向对象实现代码
2009/11/11 PHP
PHP XML error parsing SOAP payload on line 1
2010/06/17 PHP
php密码生成类实例
2014/09/24 PHP
php集成动态口令认证
2016/07/21 PHP
php-fpm添加service服务的例子
2018/04/27 PHP
javascript 类方法定义还是有点区别
2009/04/15 Javascript
jQuery实现动画效果的实例代码
2013/05/07 Javascript
动态添加删除表格行的js实现代码
2014/02/28 Javascript
javascript中setTimeout使用指南
2015/07/26 Javascript
原生JavaScript制作微博发布面板效果
2016/03/11 Javascript
Express与NodeJs创建服务器的两种方法
2017/02/06 NodeJs
jquery实现焦点轮播效果
2017/02/23 Javascript
jQuery获取table表中的td标签(实例讲解)
2017/07/28 jQuery
详解Vue微信授权登录前后端分离较为优雅的解决方案
2018/06/29 Javascript
vue将单页面改造成多页面应用的方法
2018/11/25 Javascript
利用Dectorator分模块存储Vuex状态的实现
2019/02/05 Javascript
ES6 Set结构的应用实例分析
2019/06/26 Javascript
JS数组转字符串实现方法解析
2020/09/04 Javascript
用Python编写一个每天都在系统下新建一个文件夹的脚本
2015/05/04 Python
Python基础入门之seed()方法的使用
2015/05/15 Python
从源码解析Python的Flask框架中request对象的用法
2016/06/02 Python
Python机器学习库scikit-learn安装与基本使用教程
2018/06/25 Python
详解Django定时任务模块设计与实践
2019/07/24 Python
python 图像处理画一个正弦函数代码实例
2019/09/10 Python
wxPython色环电阻计算器
2019/11/18 Python
Python实现word2Vec model过程解析
2019/12/16 Python
python3 简单实现组合设计模式
2020/07/02 Python
css3实现椭圆轨迹旋转的示例代码
2018/10/29 HTML / CSS
美国大码时尚女装购物网站:ELOQUII
2017/12/28 全球购物
Static Nested Class 和 Inner Class的不同
2013/11/28 面试题
网络工程系信息安全技术专业大学生求职信
2013/10/22 职场文书
参观考察邀请函范文
2014/01/29 职场文书
授权委托书样本及填写说明
2014/09/19 职场文书
2014年纪检部工作总结
2014/11/12 职场文书
英文商务邀请函范文
2015/01/31 职场文书
食堂管理制度范本
2015/08/04 职场文书