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中装饰器级连的使用方法示例
Sep 29 Python
Python比较2个时间大小的实现方法
Apr 10 Python
Python3之读取连接过的网络并定位的方法
Apr 22 Python
处理python中多线程与多进程中的数据共享问题
Jul 28 Python
使用 Python 遍历目录树的方法
Feb 29 Python
Python如何把Spark数据写入ElasticSearch
Apr 18 Python
python新手学习使用库
Jun 11 Python
Numpy中ndim、shape、dtype、astype的用法详解
Jun 14 Python
django数据模型中null和blank的区别说明
Sep 02 Python
Python爬虫之Selenium鼠标事件的实现
Dec 04 Python
解决Python中的modf()函数取小数部分不准确问题
May 28 Python
python实现一个简单的贪吃蛇游戏附代码
Jun 28 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实现的简单压缩英文字符串的代码
2008/04/24 PHP
Swoole-1.7.22 版本已发布,修复PHP7相关问题
2015/12/31 PHP
PHP yield关键字功能与用法分析
2019/01/03 PHP
PHP var关键字相关原理及使用实例解析
2020/07/11 PHP
IE的fireEvent方法概述及应用
2013/02/22 Javascript
javascript垃圾收集机制与内存泄漏详细解析
2013/11/11 Javascript
千分位数字格式化(用逗号隔开 代码已做了修改 支持0-9位逗号隔开)的JS代码
2013/12/05 Javascript
分析js闭包引起的事件注册问题
2016/03/29 Javascript
Bootstrap3.0学习教程之JS折叠插件
2016/05/27 Javascript
js实现简单的网页换肤效果
2017/01/18 Javascript
Node.js Mongodb 密码特殊字符 @的解决方法
2017/04/11 Javascript
详解react如何在组件中获取路由参数
2017/06/15 Javascript
浅谈node中的exports与module.exports的关系
2017/08/01 Javascript
Windows下Node.js安装及环境配置方法
2017/09/18 Javascript
用node开发并发布一个cli工具的方法步骤
2019/01/03 Javascript
JS简单判断是否在微信浏览器打开的方法示例
2019/01/08 Javascript
js继承的这6种方式!(上)
2019/04/23 Javascript
node.js express框架实现文件上传与下载功能实例详解
2019/10/15 Javascript
JS内置对象和Math对象知识点详解
2020/04/03 Javascript
纯Python开发的nosql数据库CodernityDB介绍和使用实例
2014/10/23 Python
Python实现简单状态框架的方法
2015/03/19 Python
python实现数组插入新元素的方法
2015/05/22 Python
python实现决策树分类算法
2017/12/21 Python
dataframe设置两个条件取值的实例
2018/04/12 Python
Python实现的远程登录windows系统功能示例
2018/06/21 Python
python调用摄像头显示图像的实例
2018/08/03 Python
python写程序统计词频的方法
2019/07/29 Python
Python生成器常见问题及解决方案
2020/03/21 Python
python一些性能分析的技巧
2020/08/30 Python
python 如何区分return和yield
2020/09/22 Python
Python:__eq__和__str__函数的使用示例
2020/09/26 Python
python如何修改文件时间属性
2021/02/05 Python
德国、奥地利和瑞士最大的旅行和度假门户网站:HolidayCheck
2019/11/14 全球购物
暖通工程师岗位职责
2014/06/12 职场文书
MySQL如何修改字段类型和字段长度
2022/06/10 MySQL
JavaScript前端面试扁平数据转tree与tree数据扁平化
2022/06/14 Javascript