pythonorm框架优缺点_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 TypeSqlitePostgresqlMySQL

CharFieldvarcharvarcharvarchar

FixedCharFieldcharcharchar

TextFieldtexttextlongtext

DateTimeFielddatetimetimestampdatetime

IntegerFieldintegerintegerinteger

BooleanFieldsmallintbooleanbool

FloatFieldrealrealreal

DoubleFieldrealdouble precisiondouble precision

BigIntegerFieldintegerbigintbigint

DecimalFielddecimalnumericnumeric

PrimaryKeyFieldintegerserialinteger

ForeignKeyFieldintegerintegerinteger

DateFielddatedatedate

TimeFieldtimetimetime

BlobFieldblobbyteablob

UUIDFieldnot supporteduuidnot 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

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

你可能感兴趣的:(pythonorm框架优缺点)