推荐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,这样程序就清新多了。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页面还是在持续更新,暂时不用担心,而且因为其简单,学习成本很小,也不用担心。
:lol帮顶:lol
页:
[1]