Python的Peewee的使用与理解

一  Peewee官网

peewee — peewee 3.16.2 documentationicon-default.png?t=N7T8http://docs.peewee-orm.com/en/latest/#

二  理解Peewee的模型

(一) 引用

from peewee import *

(二)选择数据库的类型

db = SqliteDatabase('school.db')

Peewee支持多种数据库:

  1. PostgresqlDatabase
  2. MySQLDatabase
  3. SqliteDatabase

这里使用Sqlite做为范例.

(三)建立模型

class Student(Model):  # 学生类
    name = CharField()#姓名字段,文本
    age = IntegerField()#年龄字段,整数
    student_number = CharField(unique=True)#学生编号,文本,唯一

    class Meta:
        database = db  # 这个模型使用或建立在数据库'school.db'
        legacy_table_names = False  # 自动表名是否使用下划线分割命名,False为使用
        table_name = '学生表'  # 自定义表名,与legacy_table_names互斥


class Grades(Model):  # 成绩类
    # 外键,与Student模型成立关系
    student_number = ForeignKeyField(
        model=Student, # 与Student模型关联
        field='student_number', # 与student_number字段关联,各项属性一致
        backref='grades')
    project = CharField()
    c_score = FloatField()
    m_score = FloatField()
    e_score = FloatField()

    class Meta:
        database = db  # 这个模型使用或建立在数据库'school.db'
        legacy_table_names = False  # 自动表名是否使用下划线分割命名,False为使用
        table_name = '成绩表'  # 自定义表名,与legacy_table_names互斥

模型的理解:

  1. 一个类就是一个模型,他的基类是Model
  2. 必须嵌套一个Meta类,里面必须绑定数据库(以后可以Model类的bind命令绑定其他数据库)
  3. 都是使用类属性
  4. 一个类可以理解成数据库里的一个表,他有增,删,改,查等操作.
  5. 类属性可以理解成表里的字段.
  6. 字段的类型一般是字符,整型,外键,具体看这里
  7. 字段的属性一般是"是否唯一","主键"等,具体看这里

 (四)建立表

可以使用数据库创建:

db.create_tables([Student, Grades]) # 可以批量创建.如表已存在,则不作操作.

也可以用模型来创建:

Student.create_table() # 只能创建模型对应的表

三  模型的各项操作

(一)增加数据

新增一条数据

s1 = Student(name='张左', age=21, student_number='1111')
s1.save()  # 不执行不保存
# 或
s1 = Student()
s1.name = '张右'
s1.age = 21
s1.student_number = '1111'
s1.save()  # 不执行不保存
# 或
s1 = Student.create(name='张左', age=21, student_number='1111')  # 不需要save

新增一批数据

data = [
    ['charlie', 25, '2222'],
    ['huey', 28, '3333'],
    ['zaizee', 31, '4444']]
query = Student.insert_many(data, fields=list(Student._meta.fields.values())[1:])
query.execute()
# 或
with db.atomic():
    slist = [Student(name='黄%s' % i, age=20, student_number='K%s' % (i + 10)) for i in range(3)]
    Student.bulk_create(slist)

 在关系表中新增一条数据

# 在关系表中新增一条数据
s9 = Student(name='张九', age=23, student_number='9999')
s9.save()  # 不执行不保存

g1 = Grades(student_number=s9, project='段考', c_score=100, m_score=99, e_score=88)
g1.save()

 在关系表中新增一批数据

s2 = Student(name='张右', age=21, student_number='2222')
s3 = Student(name='李左', age=21, student_number='3333')
s4 = Student(name='李右', age=21, student_number='4444')
l2 = [s2]+['一模', 100, 99, 98]
l3 = [s3]+['一模', 60, 70, 80]
l4 = [s4]+['一模', 80, 55, 100]
data = [l2,l3,l4]

query = Grades.insert_many(data, fields=list(Grades._meta.fields.values())[1:])
query.execute()

with db.atomic():
    Student.bulk_create([s2,s3,s4])

注意:因为student_number设置了unique,如果新增数据时,数据可能重复,应该注意处理IntegrityError错误

(二)删除数据

通过主键删除

Student.delete_by_id(6) # 建模型时,会自动设置一个自增字段id,并设为主键.

删除一条数据

query = Student.delete().where(Student.name == "黄0")
query.execute() # 不执行不保存

删除全部数据 

query = Student.delete()
query.execute()

注意:删除操作其实是生成一个删除查询,查不到也就不会删除,不会产生错误.

(三)修改数据

修改一条数据

Student.update({'name': '钱一'}).where(Student.name == '黄2').execute()

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值