Python轻量级ORM框架Peewee访问sqlite数据库的方法详解
本文详细介绍Python轻量级ORM框架Peewee在SQLite数据库中的使用方法。内容涵盖ORM基本概念、Peewee的安装步骤、模型类定义(表到类的映射)、表的创建与数据增删改查操作,以及复杂查询技巧。通过具体代码示例,帮助开发者快速掌握使用Peewee进行数据库交互的核心技能。
本文通过具体实例,解析如何利用Python轻量级ORM框架Peewee来操作SQLite数据库,旨在为读者提供实用的参考指南。
ORM(Object Relation Model,对象关系模型)的核心作用是将数据库中的表映射为面向对象编程语言中的类。借助ORM,开发者无需编写SQL语句,直接通过操作对象即可完成数据的增删改查。
ORM技术主要包含以下三种基本机制:
(1)映射技术
数据类型映射:将数据库中的数据类型转换为编程语言中对应的数据类型,例如将数据库的int类型映射为Python的integer类型。 类映射:将数据库表映射为编程语言的类,从而避免编写SQL,直接操作对象。 关系映射:针对关系型数据库中通过主外键建立的实体关联,将其映射为编程语言中基于对象引用的连接关系。
(2)CURD技术
CURD代表Create(增加)、Update(更新)、Retrieve(检索)和Delete(删除),即实现了数据库的基本增删改查功能。
(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数据结构与算法教程》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》。
希望本文所述内容能对大家的Python程序设计工作有所帮助。
免责声明:本文内容仅供参考,不代表本站观点。转载或引用请注明出处。









