Python ORM框架之 Peewee入门

摘要:
前提条件:Python3.x编程语言MySQL数据库PyMySQL驱动一、安装peewee安装非常简单,推荐使用pip命令。首先,导入peewee库下面的所有方法,这个当然需要。接下来就是表的创建,创建BaseModel类,在该类下创建子类Meta,Meta是一个内部类,它用于定义peewee的Model类的行为特性。创建User和Tweet类做为表名。通过CharField、DateTimeField、BooleanField表示字段的类型。peewee默认已经为我们加上这个id了。#把字典转成数据对象user_data={'id':2,'username':'charlie'}user=dict_to_modelprint运行结果:charlie

之前在学Django时,发现它的模型层非常好用,把对数据库的操作映射成对类、对象的操作,避免了我们直接写在Web项目中SQL语句,当时想,如果这个模型层可以独立出来使用就好了,那我们平台操作数据库也可以这么玩了,我不喜欢写SQL语句。

后来才知道,原来这个叫ORMObject Relational Mapping,对象关系映射),在Python下面有很多这样的类库,如SQLObjectStormpeeweeSQLAlchemy

这里就给你们介绍一下Peewee的基本使用,因为它非常的轻量级,最主要是和DjangoORM 操作很像,如果你学过Django那么很容易上手。

这篇博客承接上一篇,以操作MySQL为例。前提条件:

  • Python3.x 编程语言
  • MySQL数据库
  • PyMySQL驱动

一、安装peewee

安装非常简单,推荐使用pip命令。

> pip install peewee

Python ORM框架之 Peewee入门第1张

另外,你也可以通过下载包安装:https://pypi.python.org/pypi/peewee

二、创建表

from peewee import *
importdatetime
db = MySQLDatabase("guest", host="127.0.0.1", port=3306, user="root", passwd="123456")
db.connect()
classBaseModel(Model):
    classMeta:
        database =db
classUser(BaseModel):
    username = CharField(unique=True)
classTweet(BaseModel):
    user = ForeignKeyField(User, related_name='tweets')
    message =TextField()
    created_date = DateTimeField(default=datetime.datetime.now)
    is_published = BooleanField(default=True)
if __name__ == "__main__":
    #创建表
    User.create_table()  #创建User表
    Tweet.create_table()  #创建Tweet表

这里面包含不了少知识点,我们来一一解释。

首先,导入peewee库下面的所有方法,这个当然需要。

然后,通过MySQLDatabase连接数据库,把数据连接的几个必要参数一一填写。通过connect()方法与MySQL数据库建立链接。

接下来就是表的创建,创建BaseModel类,在该类下创建子类Meta,Meta是一个内部类,它用于定义peewee的Model类的行为特性。指定dabatase 为 前面定义的db。

再接下来就是表的创建了,我们在SQL语句创建表时一般需要知道以下信息。表的名字,表有哪些字段?这些字段分别是什么类型?是否允许为空,或自增?哪个字段是主键是?哪个是外键?

ORM用编程语言里的概念帮我们映射了这些东西。

创建 User 和 Tweet类做为表名。在类下面定义的变量为字段名,如username、message、created_date等。通过CharField、DateTimeField、BooleanField表示字段的类型。ForeignKeyField 建立外键。 主键呢? 建表时不都要有个主键id嘛,不用!peewee默认已经为我们加上这个id了。

最后,执行create_table()方法创建两张表。

通过数据库工具,查看生成的两张表。

Python ORM框架之 Peewee入门第2张

Python ORM框架之 Peewee入门第3张

三、插入数据

要想操作表数据,首先表里得有数据。先来看看如何添加数据。

if __name__ == "__main__":
    #...
    user = User.create(username='tom')
    Tweet.create(user=user, message="这是一段文字")

这样就要User表里添加一个tom的用户,这用户发了一条Tweet,在Tweet表里。但这个用户兴致来了,想继续发第二条Tweet。于是:

if __name__ == "__main__":
    #...
    Tweet.create(user_id=1, message="这是第二段文字")

咦~!?不对,我们没有创建user_id字段啊!但是,如果你查询Tweet表,就会发现有这个字段,用它来关联User表的id。

Python ORM框架之 Peewee入门第4张

四、查询数据

接下来,查询数据。

if __name__ == "__main__":
    #...
    #查询 1
    t = Tweet.get(message="这是一段文字")
    print(t.user_id)
    print(t.created_date)
    print(t.is_published)

查询结果:

1
2017-05-19 15:44:32
True

不过,get()方法只能查询一条,且是唯一的一条数据;通过查询条件不能查询出多条,也不能查询出0条。

if __name__ == "__main__":
    #...
    #查询 2
    ts = Tweet.filter(user_id=1)
    for t ints:
        print(t.message)

运行结果:

这是一段文字
这是第二段文字

而,filter()方法,就会更加灵活,可以查询多条结果,并把结果循环输出。

五、Playhouse库

Playhouse库中提供了一些比较有意思的方法。当我们在安装peewee时,也会捎带着把它装上。

这里只介绍它里面的model_to_dict和dict_to_model两个方法。

model_to_dict方法用法:

from playhouse.shortcuts importmodel_to_dict, dict_to_model
#……
if __name__ == "__main__":
    #……
    user = User.create(username='jack')
    #把数据对象转成字典
    u =model_to_dict(user)    
    print(u)

运行结果:

{'id': 7, 'username': 'jack'}

dict_to_model方法用法:

from playhouse.shortcuts importmodel_to_dict, dict_to_model
#……
if __name__ == "__main__":
    #……
    #把字典转成数据对象
    user_data = {'id': 2, 'username': 'charlie'}
    user =dict_to_model(User, user_data)
    print(user.username)

运行结果:

charlie

免责声明:文章转载自《Python ORM框架之 Peewee入门》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Unity之Bmob云存储一eclipse项目转android studio详解下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

python类(class)中参数self的解释说明

python类(class)中参数self的简单解释 1.self只有在类的方法中才会有,其他函数或方法是不必带self的。 2.在调用时不必传入相应的参数。3.在类的方法中(如__init__),第一参数永远是self,表示创建的类实例本身,而不是类本身。4.可以把对象的各种属性绑定到self。5.self代表当前对象的地址。self能避免非限定调用造成...

呵呵!手把手带你在 IIS 上执行 Python

公司的站点让我头痛死了。在众多前辈高手的带领下。一大堆的 CMD 在站点里执行得好好地,黑客攻击也好好地。仅仅有站点和我不好好地,我快累死了,站点快挂了。。 。 为了解决问题。我想到了 Python 来解决。但是站点上怎样执行 Python。 我在网上找了非常多资料。结果,互相抄来抄去的。问题层出不穷——各种问题都在我眼前显现。在我不断地瞎折腾,经理在...

安装RF框架(基于Python)

1、安装Python, 下载地址【https://www.python.org/ftp/python/2.7.13/python-2.7.13.amd64.msi】 系统环境配置上,配置好环境,路径是安装的路径 测试是否安装好,以管理员身份运行cmd,输入python 2、安装pip cmd:get-pip.py  好像不用安装 3、安装CMD执行【p...

scrapyd-deploy 把scrapy项目打包上传部署到scrapyd服务端报错 Deploy failed (500)

Outline 在把scrapy任务部署到scrapyd服务上时,遇到问题一直不成功: 报错如下: (Deploy failed (500):,部署失败) scrapyd-deploy muji_data_python_spider -p muji_data_python_spider Packing version 1617328541 scrapyd...

How to install Ta-Lib in Python

Technical indicators are calculated using historical price and volume data to predict the market direction. These indicators are added on charts using which you can set your entry...

Python中的join函数用法

函数:string.join()Python中有join()和os.path.join()两个函数,具体作用如下:    join():    连接字符串数组。将字符串、元组、列表中的元素以指定的字符(分隔符)连接生成一个新的字符串    os.path.join():  将多个路径组合后返回一、函数说明1、join()函数语法:  'sep'.join(...