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中Django框架下的staticfiles使用简介
May 30 Python
python中使用序列的方法
Aug 03 Python
Flask框架中密码的加盐哈希加密和验证功能的用法详解
Jun 07 Python
Python实现扩展内置类型的方法分析
Oct 16 Python
Python中Numpy mat的使用详解
May 24 Python
django之使用celery-把耗时程序放到celery里面执行的方法
Jul 12 Python
Python绘制三角函数图(sin\cos\tan)并标注特定范围的例子
Dec 04 Python
pytorch 计算ConvTranspose1d输出特征大小方式
Jun 23 Python
python实现npy格式文件转换为txt文件操作
Jul 01 Python
Python调用REST API接口的几种方式汇总
Oct 19 Python
OpenCV利用python来实现图像的直方图均衡化
Oct 21 Python
pygame面向对象的飞行小鸟实现(Flappy bird)
Apr 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内嵌函数用法实例
2015/03/20 PHP
thinkPHP分组后模板无法加载问题解决方法
2016/07/12 PHP
PHP封装的mysqli数据库操作类示例
2019/02/16 PHP
使用tp框架和SQL语句查询数据表中的某字段包含某值
2019/10/18 PHP
JavaScript网页制作特殊效果用随机数
2007/05/22 Javascript
javascript 哈希表(hashtable)的简单实现
2010/01/20 Javascript
当json键为数字时的取值方法解析
2013/11/15 Javascript
Javascript连接Access数据库完整实例
2015/08/03 Javascript
jquery获取下拉框中的循环值
2017/02/08 Javascript
Angular.js与node.js项目里用cookie校验账户登录详解
2017/02/22 Javascript
Webpack之tree-starking 解析
2018/09/11 Javascript
小程序实现选择题选择效果
2018/11/04 Javascript
详解Vue项目引入CreateJS的方法(亲测可用)
2019/05/30 Javascript
elementui之el-tebs浏览器卡死的问题和使用报错未注册问题
2019/07/06 Javascript
js中的this的指向问题详解
2019/08/29 Javascript
JS实现audio音频剪裁剪切复制播放与上传(步骤详解)
2020/07/28 Javascript
JavaScript实现点击图片换背景
2020/11/20 Javascript
[31:00]2014 DOTA2华西杯精英邀请赛5 24 NewBee VS iG
2014/05/25 DOTA
python求素数示例分享
2014/02/16 Python
python实现傅里叶级数展开的实现
2018/07/21 Python
djano一对一、多对多、分页实例代码
2019/08/16 Python
django使用xadmin的全局配置详解
2019/11/15 Python
python使用html2text库实现从HTML转markdown的方法详解
2020/02/21 Python
Python将二维列表list的数据输出(TXT,Excel)
2020/04/23 Python
Python尾递归优化实现代码及原理详解
2020/10/09 Python
python爬虫线程池案例详解(梨视频短视频爬取)
2021/02/20 Python
咨询公司各岗位职责
2013/12/02 职场文书
生物学学生自我评价
2014/01/17 职场文书
三查三看党性分析材料
2014/02/18 职场文书
安全技术说明书
2014/05/09 职场文书
医学求职自荐信
2014/06/21 职场文书
专家推荐信怎么写
2015/03/25 职场文书
欠条范文
2015/07/03 职场文书
HTML中table表格拆分合并(colspan、rowspan)
2021/04/07 HTML / CSS
教你使用Python pypinyin库实现汉字转拼音
2021/05/27 Python
Vue图片裁剪组件实例代码
2021/07/02 Vue.js