- 论坛徽章:
- 0
|
以下是自己在一些项目中的简单心得,无他,旨在向一些不了解peewee的新手推荐一个顺手的工具,提供开发效率。至于具体使用细节,官方文档还是读一下吧,简单的文字。
熟手跳过。
你操作数据库时在用繁琐难维护的SQL?还是笨重复杂的SqlAlchemy?或者是你运气够好使用DJANGO而享受其ORM?
我曾经也是有SQlAlchemy,不过几次后难以忍受其复杂和不直观,他号称最佳ORM,但是其高级特性我都用不上,反而因其设计而用的特别别扭。后来我再三搜索和比较,觉得peewee真合我意,用了两个项目后越发感叹,peewee在项目中完全没有存在感,你不会感觉到在使用peewee,而是下意识的操作一些数据,就像python内置一样。(用SQlalchemy每次操作都会知道你在用SA)。
peewee基本上没有中文文档,不过因为其简单(单文件),API设计合理,所以阅读官方文档即可娴熟操作,下面我简单写一点点让你有一个感性认识,至于外键什么的也很简单,为了明了,这里就不写实例了。
peewee我感觉不好的一个就是查询一行(.get())时如果查询不到,会抛出异常,这就导致了每次很多try/except,所以我就在自己的基类中添加了一个getOne()接口,封装其get()接口,查询不到返回None,这样程序就清新多了。- from peewee import *
- #创建数据库实例
- db = SqliteDatabase('base.db')
- #建议自己的项目使用一个新的基类,Model是peewee的基类
- class MyBaseModel(Model):
- class Meta:
- database = db
- @classmethod
- def getOne(cls, *query, **kwargs):
- #为了方便使用,新增此接口,查询不到返回None,而不抛出异常
- try:
- return cls.get(*query,**kwargs)
- except DoesNotExist:
- return None
- #示范一个表
- class User(MyBaseModel):
- name = CharField(unique=True)
- password = CharField()
- group = CharField(default='admin')
- value = FloatField(default=0.0)
- #建表,仅需创建一次
- User.create_table()
- #新增行
- User.create(name=name,password=password)
- #查询一行
- user = User.getOne(User.name='MyGod')
- print(user.password)
- #更新
- user.value += 1
- user.save()
- #删除
- user.delete_instances()
- #查询多行
- usersInGroup = User.select().where(User.group == 'admin')
- usersStartsWithA = User.select().where(User.name ** 'A%') #不区分大小写的like查询
- usersWithOrder = User.select().where(User.group == 'admin').order_by(User.name.desc()) #按姓名倒序排序
- #统计admin用户组所有用户的value总和
- total = User.select(fn.Sum(User.value).alias('totalvalue')).where(User.group=='admin')
- #更新多个(将a打头的用户的value全部更新为1)
- User.update(value = 1).where(User.name ** 'A%').execute()
复制代码 其他的一些API,看一下文件就都会了。
peewee的开发者说就是因为他在用SA的时候感觉太复杂了,所以就开发了这个简单的,因为简单,效率也比sa要好。
大部分人其实是不需要特别复杂的SQL特性的,这时候peewee就刚好,郑重推荐!
我之前担心过peewee后续能否持续开发的问题,不过我看其github页面还是在持续更新,暂时不用担心,而且因为其简单,学习成本很小,也不用担心。
|
|