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改变日志(logging)存放位置的示例
Mar 27 Python
通过5个知识点轻松搞定Python的作用域
Sep 09 Python
Python 快速实现CLI 应用程序的脚手架
Dec 05 Python
Python数据结构与算法之图的基本实现及迭代器实例详解
Dec 12 Python
python matplotlib画图实例代码分享
Dec 27 Python
Python实现的rsa加密算法详解
Jan 24 Python
python列表每个元素同增同减和列表元素去空格的实例
Jul 20 Python
pytorch 实现打印模型的参数值
Dec 30 Python
pytorch 模拟关系拟合——回归实例
Jan 14 Python
TensorFlow2.0:张量的合并与分割实例
Jan 19 Python
Python用input输入列表的实例代码
Feb 07 Python
python利用文件时间批量重命名照片和视频
Feb 09 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使用parse_str实现查询字符串解析到变量中的方法
2017/02/17 PHP
php mysql PDO 查询操作的实例详解
2017/09/23 PHP
php 多个变量指向同一个引用($b = &amp;$a)用法分析
2019/11/13 PHP
WEB高性能开发之疯狂的HTML压缩
2010/06/19 Javascript
基于jQuery的为attr添加id title等效果的实现代码
2011/04/20 Javascript
JS实现商品倒计时实现代码
2013/05/03 Javascript
js整数字符串转换为金额类型数据(示例代码)
2013/12/26 Javascript
JavaScript数组函数unshift、shift、pop、push使用实例
2014/08/27 Javascript
JavaScript字符串对象的concat方法实例(用于连接两个或多个字符串)
2014/10/16 Javascript
微信小程序 PHP后端form表单提交实例详解
2017/01/12 Javascript
js oncontextmenu事件使用详解
2017/03/25 Javascript
Vue+elementui 实现复杂表头和动态增加列的二维表格功能
2019/09/23 Javascript
Node.js开发之套接字(socket)编程入门示例
2019/11/05 Javascript
nuxt 路由、过渡特效、中间件的实现代码
2020/11/06 Javascript
Python开发的HTTP库requests详解
2017/08/29 Python
Python实现二维数组输出为图片
2018/04/03 Python
pycharm恢复默认设置或者是替换pycharm的解释器实例
2018/10/29 Python
Gauss-Seidel迭代算法的Python实现详解
2019/06/29 Python
用Python抢火车票的简单小程序实现解析
2019/08/14 Python
pytorch使用指定GPU训练的实例
2019/08/19 Python
详解python中的生成器、迭代器、闭包、装饰器
2019/08/22 Python
python连接mongodb集群方法详解
2020/02/13 Python
40行Python代码实现天气预报和每日鸡汤推送功能
2020/02/27 Python
Pycharm安装第三方库失败解决方案
2020/11/17 Python
CSS3结构性伪类选择器九种写法
2012/04/18 HTML / CSS
Application Cache未缓存文件无法访问无法加载问题
2014/05/31 HTML / CSS
HTML5添加禁止缩放功能
2017/11/03 HTML / CSS
俄罗斯眼镜网: optikaworld
2016/07/31 全球购物
彪马俄罗斯官网:PUMA俄罗斯
2019/07/13 全球购物
创立科技Java面试题
2015/11/29 面试题
自荐信的禁忌和要点
2013/10/15 职场文书
工程负责人任命书
2014/06/06 职场文书
实习班主任自我评价
2015/03/11 职场文书
工作简报怎么写
2015/07/21 职场文书
Python借助with语句实现代码段只执行有限次
2022/03/23 Python
使用opencv-python如何打开USB或者笔记本前置摄像头
2022/06/21 Python