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中类型检查的详细介绍
Feb 13 Python
详细解读tornado协程(coroutine)原理
Jan 15 Python
Python拼接微信好友头像大图的实现方法
Aug 01 Python
python监控进程状态,记录重启时间及进程号的实例
Jul 15 Python
python Django 创建应用过程图示详解
Jul 29 Python
使用Python自动生成HTML的方法示例
Aug 06 Python
Python Django中的STATIC_URL 设置和使用方式
Mar 27 Python
python继承threading.Thread实现有返回值的子类实例
May 02 Python
python 实现 hive中类似 lateral view explode的功能示例
May 18 Python
pandas创建DataFrame的7种方法小结
Jun 14 Python
Django数据库迁移常见使用方法
Nov 12 Python
python中pycryto实现数据加密
Apr 29 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
浅析HTTP消息头网页缓存控制以及header常用指令介绍
2013/06/28 PHP
thinkphp中session和cookie无效的解决方法
2014/12/19 PHP
PHP面向对象中new self()与 new static()的区别浅析
2017/08/17 PHP
基于jQuery的仿flash的广告轮播
2010/11/05 Javascript
深入理解JavaScript系列(3) 全面解析Module模式
2012/01/15 Javascript
js弹出层包含flash 不能关闭隐藏的2种处理方法
2013/06/17 Javascript
javascript实现10个球随机运动、碰撞实例详解
2015/07/08 Javascript
jquery实现顶部向右伸缩的导航区域代码
2015/09/02 Javascript
Bootstrap框架动态生成Web页面文章内目录的方法
2016/05/12 Javascript
开源免费天气预报接口API及全国所有地区代码(国家气象局提供)
2016/12/26 Javascript
angularjs中ng-attr的用法详解
2016/12/31 Javascript
AngularJS 霸道的过滤器小结
2017/04/26 Javascript
vue基于mint-ui实现城市选择三级联动
2020/06/30 Javascript
基于ionic实现下拉刷新功能
2018/05/10 Javascript
JavaScript数组、json对象、eval()函数用法实例分析
2019/02/21 Javascript
vue ajax 拦截原理与实现方法示例
2019/11/29 Javascript
VUE实现吸底按钮
2021/03/04 Vue.js
Python 深入理解yield
2008/09/06 Python
easy_install python包安装管理工具介绍
2013/02/10 Python
Python编程之变量赋值操作实例分析
2017/07/24 Python
python如何重载模块实例解析
2018/01/25 Python
python进程的状态、创建及使用方法详解
2019/12/06 Python
解决tensorflow打印tensor有省略号的问题
2020/02/04 Python
Pycharm中切换pytorch的环境和配置的教程详解
2020/03/13 Python
Django调用支付宝接口代码实例详解
2020/04/04 Python
使用tensorflow根据输入更改tensor shape
2020/06/23 Python
Django项目创建及管理实现流程详解
2020/10/13 Python
pytorch 实现L2和L1正则化regularization的操作
2021/03/03 Python
html5的自定义data-*属性与jquery的data()方法的使用
2014/07/02 HTML / CSS
最新远光软件笔试题面试题内容
2013/11/08 面试题
JVM是一个编译程序还是解释程序
2012/09/11 面试题
出纳会计岗位职责
2014/03/12 职场文书
群众路线四风对照检查材料
2014/11/04 职场文书
公司更名通知函
2015/04/24 职场文书
教师节班会开场白
2015/06/01 职场文书
Python Socket编程详解
2021/04/25 Python