python 轻量级 数据库orm框架 peewee使用

peewee 使用

最近在写一个运维平台,开始因为项目比较着急,而且经验不足,所以直接用的 MySQLdb模块连接的数据库。对于我这种不善于写sql的人来说,是个很悲剧的事情。后来,发现了python的orm框架,在选择框架的时候,听从了,沈灿大哥的建议 选择了peewee 来操作数据库。
废话少说。。来进行操作吧。

#首先来说下数据库的连接,我们一般用到的都是mysql数据库,所以我这里也用mysql数据库做例子

 
db_connect = MySQLDatabase(host='host', user='username', passwd='password', database='db_name',
                          charset='utf8')

这就是数据库的连接。但是,在使用的时候,一定要记住关闭连接。

 
db_connect.connect() #开启连接
db_connect.close()   #关闭连接

数据库的操作
我们数据库已经连接好了,现在该开始操作数据库了

首先我们要建立一个表的结构。
如果用sql建立一个包含 id,name,passwd 字段的user表,该怎么做呢?

 
create table user (`id` int(11) unsigned NOT NULL AUTO_INCREMENT COMMENT 'id,主键',
					`name` VARCHAR (50) NOT NULL DEFAULT '' COMMENT '名称',
					`name` VARCHAR (50) NOT NULL DEFAULT '' COMMENT '密码',)

那如果用peewee应该怎么做呢?

 
db_connect = MySQLDatabase(host='host', user='username', passwd='password', database='db_name',
                          charset='utf8')


class user(Model):
    id = IntegerField()   #int 数据类型
    name = CharField()    #varchar 可变字符串
    passwd = CharField()  

    class Meta:
        database = db


db_connect.connect()
user.create_table()
db_connect.close()

就这样,一个表就建立好了。
大家在创建mysql表的时候,会有很多的数据类型。那么peewee和mysql数据类型是怎么做映射的呢?
下面就是官方文档的一个对应关系表格。。

 
Field Type			Sqlite	Postgresql	MySQL
CharField			varchar	varchar	varchar
FixedCharField		char	char	char
TextField			text	text	longtext
DateTimeField		datetime	timestamp	datetime
IntegerField		integer	integer	integer
BooleanField		smallint	boolean	bool
FloatField			real	real	real
DoubleField			real	double precision	double precision
BigIntegerField		integer	bigint	bigint
DecimalField		decimal	numeric	numeric
PrimaryKeyField		integer	serial	integer
ForeignKeyField		integer	integer	integer
DateField			date	date	date
TimeField			time	time	time
BlobField			blob	bytea	blob
UUIDField			not supported	uuid	not supported

现在进行数据库的增删改查

添加数据

 
User.create(name=name,password=password)

对应sql

 
insert into user (name,password) value (name,password)

删除数据

 
user.delete_instances()

修改数据

 
#更新多个(将a打头的用户的value全部更新为1)
User.update(value = 1).where(User.name ** 'A%').execute()

对应sql

 
update user set value = 1 where name like "%A%"

查询数据

 
user.select()       #遍历数据

条件查询

 
user.select().where(id = 1)

排序

 
user.select().order_by(user.id.desc())

对应sql

 
select * from user order by id desc

去重

 
user.select().group_by(user.id).distinct(user.name)

对应sql

 
select * from user group by id  distinct name 

多表联合查询

 
user.select().join(group).order_by(group.username, user.name.desc())

对应sql

 
SELECT t1."id", t1."user", t1."passwd""
FROM "user" AS t1
INNER JOIN "group" AS t2
  ON t1."id" = t2."id"
ORDER BY t2."username", t1."name" DESC

批量插入数据

 
data = {'name':'auga','age':'27'}
user.create(**data)

批量插入数据时,如果出现多余的Key 不会影响正常数据的插入

批量更新数据

 
data = {'name':'auga','age':'27'}
user.update(**data).where(user.id == 1).execute()

批量插入数据时。数据中的key必须与表的字段相对。只可以少,不可以多。。

好了,其他的大家就去看下官方文档吧。
http://peewee.readthedocs.org/en/latest/peewee/querying.html#selecting-a-single-record

在下才疏学浅。。。。刚学到这些,以后会补充的

未经允许不得转载:99ya » python 轻量级 数据库orm框架 peewee使用

抢沙发