司开星的博客

peewee 及 MongoEngine 笔记

peewee

peewee 是Python中常用的ORM模块,类似SQLAlchemy,支持连接MySQL/SQLite/Postgresql 等数据库。

连接数据库

以连接MySQL为例:

1
2
3
from peewee import *
mysql_db = MySQLDatabase('database', host="", user="",passwd="" )
mysql_db.connect()

定义数据模型 (Model)

定义一个Person模型,对应数据库中的person表:

1
2
3
4
5
6
7
class Person(Model):
name = CharField()
birthday = DateField()
is_relative = BooleanField()

class Meta:
database = mysql_db

如果要创建多个模型可以定义一个模型基类:

1
2
3
4
5
6
7
8
9
10
class BaseModel(Model):
class Meta:
database = mysql_db

class User(BaseModel):
username = CharField()

class Tweet(BaseModel):
user = ForeignKeyField(User, related_name='tweets')
message = TextField()

创建表

mysql_db.create_tables([User, Tweet])

插入与更新数据

可以直接通过类新建数据:

1
2
uncle_bob = Person(name='Bob', birthday=date(1960, 1, 15), is_relative=True)
uncle_bob.save()

调用save()方法之后,数据会被插入到数据库中,返回此操作影响的数据数量。

或者通过create()方法新建并插入:

1
grandma = Person.create(name='Grandma', birthday=date(1935, 3, 1), is_relative=True)

如果要更新数据,直接修改实例属性值即可:

1
2
grandma.name = 'Grandma L.'
grandma.save()

查找数据

可以通过以下两种方法查找数据:

grandma = Person.select().where(Person.name == 'Grandma L.').get()

grandma = Person.get(Person.name == 'Grandma L.')

如果有多个结果,可以用循环依次取出:

1
2
3
query = Pet.select().where(Pet.animal_type == 'cat')
for pet in query:
print pet.name, pet.owner.name

MongoEngine

与关系型数据库的ORM相对应,NoSQL有ODM。

MongoEngine是Mongodb的ODM模块。

连接数据库

1
2
from mongoengine import *
connect('tumblelog')

定义数据模块(model)

1
2
3
4
class User(Document):
email = StringField(required=True)
first_name = StringField(max_length=50)
last_name = StringField(max_length=50)

插入与更新数据

插入:

1
2
ross = User(email='ross@example.com', first_name='Ross', last_name='Lawley').save()
ross.save()

更新:

1
2
ross.first_name = 'Ross'
ross.save()

查找数据

1
2
for post in Post.objects(tags='mongodb'):
print(post.title)

参考资料:

peewee document

MongoEngine document