推荐python的ORM框架peewee(转)

以下是自己在一些项目中的简单心得,无他,旨在向一些不了解peewee的新手推荐一个顺手的工具,提供开发效率。至于具体使用细节,官方文档还是读一下吧,简单的文字。
熟手跳过。

你操作数据库时在用繁琐难维护的SQL?还是笨重复杂的SqlAlchemy?或者是你运气够好使用DJANGO而享受其ORM?

我曾经也是有SQlAlchemy,不过几次后难以忍受其复杂和不直观,他号称最佳ORM,但是其高级特性我都用不上,反而因其设计而用的特别别扭。后来我再三搜索和比较,觉得peewee真合我意,用了两个项目后越发感叹,peewee在项目中完全没有存在感,你不会感觉到在使用peewee,而是下意识的操作一些数据,就像python内置一样。(用SQlalchemy每次操作都会知道你在用SA)。

peewee基本上没有中文文档,不过因为其简单(单文件),API设计合理,所以阅读官方文档即可娴熟操作,下面我简单写一点点让你有一个感性认识,至于外键什么的也很简单,为了明了,这里就不写实例了。

peewee我感觉不好的一个就是查询一行(.get())时如果查询不到,会抛出异常,这就导致了每次很多try/except,所以我就在自己的基类中添加了一个getOne()接口,封装其get()接口,查询不到返回None,这样程序就清新多了。
  1. from peewee import *

  2. #创建数据库实例
  3. db = SqliteDatabase('base.db')

  4. #建议自己的项目使用一个新的基类,Model是peewee的基类
  5. class MyBaseModel(Model):
  6.     class Meta:
  7.         database = db

  8.     @classmethod
  9.     def getOne(cls, *query, **kwargs):
  10.        #为了方便使用,新增此接口,查询不到返回None,而不抛出异常
  11.        try:
  12.           return cls.get(*query,**kwargs)
  13.        except DoesNotExist:
  14.            return None

  15. #示范一个表
  16. class User(MyBaseModel):
  17.     name = CharField(unique=True)
  18.     password = CharField()
  19.     group = CharField(default='admin')
  20.     value = FloatField(default=0.0)

  21. #建表,仅需创建一次
  22. User.create_table()

  23. #新增行
  24. User.create(name=name,password=password)

  25. #查询一行
  26. user = User.getOne(User.name='MyGod')
  27. print(user.password)

  28. #更新
  29. user.value += 1
  30. user.save()

  31. #删除
  32. user.delete_instances()

  33. #查询多行
  34. usersInGroup = User.select().where(User.group == 'admin')
  35. usersStartsWithA = User.select().where(User.name ** 'A%')   #不区分大小写的like查询
  36. usersWithOrder = User.select().where(User.group == 'admin').order_by(User.name.desc()) #按姓名倒序排序


  37. #统计admin用户组所有用户的value总和
  38. total = User.select(fn.Sum(User.value).alias('totalvalue')).where(User.group=='admin')

  39. #更新多个(将a打头的用户的value全部更新为1)
  40. User.update(value = 1).where(User.name ** 'A%').execute()
复制代码
其他的一些API,看一下文件就都会了。
peewee的开发者说就是因为他在用SA的时候感觉太复杂了,所以就开发了这个简单的,因为简单,效率也比sa要好。
大部分人其实是不需要特别复杂的SQL特性的,这时候peewee就刚好,郑重推荐!
我之前担心过peewee后续能否持续开发的问题,不过我看其github页面还是在持续更新,暂时不用担心,而且因为其简单,学习成本很小,也不用担心。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值