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解析xml成对应的html示例分享
Apr 02 Python
Python下singleton模式的实现方法
Jul 16 Python
Django中传递参数到URLconf的视图函数中的方法
Jul 18 Python
Python3实现的Mysql数据库操作封装类
Jun 06 Python
在Pandas中给多层索引降级的方法
Nov 16 Python
Python中zip()函数的简单用法举例
Sep 02 Python
Python 变量的创建过程详解
Sep 02 Python
pytorch:torch.mm()和torch.matmul()的使用
Dec 27 Python
python同义词替换的实现(jieba分词)
Jan 21 Python
python3.6连接mysql数据库及增删改查操作详解
Feb 10 Python
python 爬取吉首大学网站成绩单
Jun 02 Python
python如何为list实现find方法
May 30 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/08/24 PHP
fleaphp常用方法分页之Pager使用方法
2011/04/23 PHP
基于php使用memcache存储session的详解
2013/06/25 PHP
基于jQuery的动态表格插件
2011/03/28 Javascript
javascript suggest效果 自动完成实现代码分享
2012/02/17 Javascript
ExtJS下书写动态生成的xml(兼容火狐)
2013/04/02 Javascript
JavaScript调用ajax获取文本文件内容实现代码
2014/03/28 Javascript
JavaScript显示当前文档最后修改日期的方法
2015/03/19 Javascript
jQuery链式调用与show知识浅析
2016/05/11 Javascript
使用JQuery 加载页面时调用JS的实现方法
2016/05/30 Javascript
浅谈JavaScript的内置对象和浏览器对象
2016/06/03 Javascript
webix+springmvc session超时跳转登录页面
2016/10/30 Javascript
AngularJS模仿Form表单提交的实现代码
2016/12/08 Javascript
JS实现利用两个队列表示一个栈的方法
2017/12/13 Javascript
微信小程序实现登录注册tab切换效果
2020/12/29 Javascript
解决Vue在封装了Axios后手动刷新页面拦截器无效的问题
2018/11/08 Javascript
Vue CL3 配置路径别名详解
2019/05/30 Javascript
js实现时钟定时器
2020/03/26 Javascript
javascript设计模式 ? 抽象工厂模式原理与应用实例分析
2020/04/09 Javascript
JS实现百度搜索框
2021/02/25 Javascript
Pyhton中防止SQL注入的方法
2015/02/05 Python
深入解析Python中的descriptor描述器的作用及用法
2016/06/27 Python
python 读取视频,处理后,实时计算帧数fps的方法
2018/07/10 Python
Python坐标线性插值应用实现
2019/11/13 Python
python实现加密的方式总结
2020/01/19 Python
DjangoWeb使用Datatable进行后端分页的实现
2020/05/18 Python
Python3爬虫中关于Ajax分析方法的总结
2020/07/10 Python
Python实现区域填充的示例代码
2021/02/03 Python
巴西体育用品商店:Lojão dos Esportes
2018/07/21 全球购物
Viking Direct荷兰:购买办公用品
2019/06/20 全球购物
Ariat英国官网:为世界顶级马术运动员制造最优质的鞋类和服装
2020/02/14 全球购物
泰国排名第一的家居用品中心:HomePro
2020/11/18 全球购物
说说你所熟悉或听说过的j2ee中的几种常用模式?及对设计模式的一些看法
2012/05/24 面试题
学校党的群众路线教育实践活动整改措施
2014/10/25 职场文书
公司处罚决定书
2015/06/24 职场文书
Python+Selenium实现抖音、快手、B站、小红书、微视、百度好看视频、西瓜视频、微信视频号、搜狐视频、一点号、大风号、趣头条等短视频自动发布
2022/04/13 Python