Python 简单的使用 peewee ORM扩展

学习的原因:因看到部分同事脚本使用python,所以个人也想去试试, 又想使用orm来方便书写美观的sql,所以进行python 下好用的orm探索之路的开始。

ps: 最后在脚本中没有使用到orm,而是使用了公司运维使用pymysql 封装的类

python ORM:  (只研究了SQLalchemy 和 peewee 其他不予对比)

1、Django's ORM 

2、SQLObject 

3、SQLalchemy :  企业级API, 功能健全 (个人觉得使用太过于复杂) 

4、peewee :  轻量,使用方便,容易上手 

5、Storm 


详细资料:请查看 Peewee 官方文档,本文为基本的使用

安装 peewee

pip install peewee

链接 mysql

# 引入 peewee 扩展
from peewee import *

# 连接的数据库名  # 第一个字段,是库名, host:地址 user: 数据库用户名 passwd: 用户密码 charset:字符集  port;端口号
db = MySQLDatabase('test', host='localhost', user='root', passwd='', charset='utf8mb4', port=3306)

定义Model 并创建

# 创建一个指定数据库的基础模型类
class BaseModel(Model):
    class Meta:
        database = db  # 将实体与数据库进行绑定

# 定义模型类
class Person(BaseModel):  # 继承自BaseModel,直接关联db,并且也继承了ModelModel有提供增删查改的函数
    # 定义字段
     name = CharField(verbose_name='姓名', max_length=10, null=False, index=True)
     passwd = CharField(verbose_name='密码', max_length=20, null=False, default='ssss')
     gender = IntegerField(verbose_name='姓别', null=False, default=1)
     is_admin = BooleanField(verbose_name='是否是管理员', null=False, default=True)

# 创建表
Person.create_table()

所有的字段类型 :



所有的字段初始化 参数:

    

基本的CURD操作

增:

# 插入数据
Person.create(name="SD")

# 插入后返回主键
print Person.insert(name="SD2").execute()

# 建立模型,插入数据
SD= Person()
huey.name = 'SD'
huey.save()

# 批量插入
data = [
    {'name': '小李子', 'passwd': '2222'},
    {'name': '大王子', 'passwd': '2222'}
]
Person.insert_many(data).execute()

删:

Person.delete().where(Person.id == 6).execute()

改:

# 更新数据
Person.update(passwd='小李子').where(Person.id < 5).execute()

# 多个条件
Person.update(passwd='小李子').where(Person.id < 5).where(Person.is_admin == 1).execute()

查:

查询所有
query = Person.select()
for row in query:
    print row.name

# 获取一条数据
Person.get()
# 可以在get中添加简单的搜索条件
Person.get(Person.id == 1)


# 根据id获取一条数据
Person.get_by_id(1)

# 高级的查询(和一般使用习惯差不多)
Person.select().join().where().order_by().get()

查询转换:

# 数据转换成元祖
query = Person.select().tuples()
for row in query:
    print(row)

# 数据转换成字典
query = Person.select().dicts()
for row in query:
    print(row)

第二种转换方式
使用 playhouse.shortcuts 扩展
model_to_dict:将model 转换成字典
dict_to_model:将dict 转换成model

from playhouse.shortcuts import model_to_dict, dict_to_model

Person.select()
for row in query:
    print model_to_dict(row)

以上都是peewee的基本操作,更多详细的复杂操作可以查看 peewee文档。