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基于list的append和pop方法实现堆栈与队列功能示例
Jul 24 Python
简单实现python收发邮件功能
Jan 05 Python
安装python时MySQLdb报错的问题描述及解决方法
Mar 20 Python
详解Python中is和==的区别
Mar 21 Python
在pytorch中查看可训练参数的例子
Aug 18 Python
基于pytorch的lstm参数使用详解
Jan 14 Python
Python list运算操作代码实例解析
Jan 20 Python
python使用ctypes调用扩展模块的实例方法
Jan 28 Python
python实现图片横向和纵向拼接
Mar 05 Python
python 实现rolling和apply函数的向下取值操作
Jun 08 Python
python scipy 稀疏矩阵的使用说明
May 26 Python
Python 键盘事件详解
Nov 11 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
phpfans留言版用到的数据操作类和分页类
2007/01/04 PHP
php下使用以下代码连接并测试
2008/04/09 PHP
php通过前序遍历树实现无需递归的无限极分类
2015/07/10 PHP
实现PHP搜索加分页
2016/10/12 PHP
php使用正则表达式获取字符串中的URL
2016/12/29 PHP
Javascript 面向对象编程(coolshell)
2012/03/18 Javascript
jquery 中多条件选择器,相对选择器,层次选择器的区别
2012/07/03 Javascript
如何让页面加载完成后执行js
2013/06/26 Javascript
没有document.getElementByName方法
2013/08/19 Javascript
Jquery 动态生成表格示例代码
2013/12/24 Javascript
jquery.post用法示例代码
2014/01/03 Javascript
简单的ajax连接库分享(不用jquery的ajax)
2014/01/19 Javascript
js判断浏览器类型为ie6时不执行
2014/06/15 Javascript
微信分享的标题、缩略图、连接及描述设置方法
2014/10/14 Javascript
JavaScript中调用函数的4种方式代码实例
2015/07/08 Javascript
javascript实现根据iphone屏幕方向调用不同样式表的方法
2015/07/13 Javascript
js实现简单的省市县三级联动效果实例
2016/02/18 Javascript
详细谈谈javascript的对象
2016/07/31 Javascript
JS仿hao123导航页面图片轮播效果
2016/09/01 Javascript
浅谈Node.js:理解stream
2016/12/08 Javascript
手机软键盘弹出时影响布局的解决方法
2016/12/15 Javascript
JS求解三元一次方程组值的方法
2017/01/03 Javascript
JavaScript 实现 Tab 点击切换实例代码
2017/03/25 Javascript
JS实现中英文混合文字溢出友好截取功能
2018/08/06 Javascript
如何用Node写页面爬虫的工具集
2018/10/26 Javascript
Python tempfile模块学习笔记(临时文件)
2014/05/25 Python
Python 常用的安装Module方式汇总
2017/05/06 Python
PHP实现发送和接收JSON请求
2018/06/07 Python
python中logging模块的一些简单用法的使用
2019/02/22 Python
详解Python 调用C# dll库最简方法
2019/06/20 Python
python3在同一行内输入n个数并用列表保存的例子
2019/07/20 Python
.net面试题
2016/09/17 面试题
卫校毕业生自我鉴定
2014/09/28 职场文书
镇人大副主席民主生活会对照检查材料思想汇报
2014/10/01 职场文书
研究生导师推荐信
2015/03/25 职场文书
Go语言设计模式之结构型模式
2021/06/22 Golang