Orator

Orator提供一个简单和方便的数据库数据处理库。

它的灵感来源于PHP的Laravel框架,借助其思想实现了python版的查询构造器和ORM。

这是完整的文档:http://orator-orm.com/docs

安装

你可以有两种不同的安装方式。

  • 使用pip安装。
pip install orator

基本使用

配置

你需要开始配置数据库连接,及创建一个DatabaseManager实例。

from orator import DatabaseManager, Model

config = {
'mysql': {
'driver': 'mysql',
'host': 'localhost',
'database': 'database',
'user': 'root',
'password': '',
'prefix': ''
}
} db = DatabaseManager(config)
Model.set_connection_resolver(db)

定义一个模型

class User(Model):
pass

在模型中定义__table__属性来确定表名。

class User(Model):

    __table__ = 'my_users'

其次还可以定义__primary_key来确定主键,__connection__来确定连接。

如果你不希望默认创建updated_atcreated_at字段,则将__timestamps__属性置为False

查询模型所有数据

users = User.all()

通过主键查询数据

user = User.find(1)

print(user.name)

使用模型查询

users = User.where('votes', '>', 100).take(10).get()

for user in users:
print(user.name)

聚合查询

你可以使用查询构造器。

count = User.where('votes', '>', 100).count()
users = User.where_raw('age > ? and votes = 100', [25]).get()

分片查询

如果你希望一次查询一部分数据,则可以使用chunk方法。

for users in User.chunk(100):
for user in users:
# ...

指定数据库连接

在模型中,可以使用on方法指定数据库连接。

user = User.on('connection-name').find(1)

你还可以使用read/write指定只读或只写连接。

user = User.on_write_connection().find(1)

字段管理

当创建一个新的模型,通过构造函数给模型设置属性。

例如:在模型中设置__filltble或者__guarded__属性。

在模型中定义填充字段

这个__filltable__属性。

class User(Model):

    __fillable__ = ['first_name', 'last_name', 'email']

在模型中定义禁止字段

这个__guarded__属性。

class User(Model):

    __guarded__ = ['id', 'password']

禁止所有字段

__guarded__ = ['*']

插入、更新和删除

保存一个新的模型

在数据库中创建一个新的记录,使用save方法。

user = User()

user.name = 'John'

user.save()

在创建完成之后,可以这样获取到自增id。

inserted_id = user.id

使用create方法

# Create a new user in the database
user = User.create(name='John') # Retrieve the user by attributes, or create it if it does not exist
user = User.first_or_create(name='John') # Retrieve the user by attributes, or instantiate it if it does not exist
user = User.first_or_new(name='John')

更新数据

user = User.find(1)

user.name = 'Foo'

user.save()

你也可以这样更新数据。

affected_rows = User.where('votes', '>', 100).update(status=2)

删除数据

user = User.find(1)

user.delete()

通过主键删除数据

User.destroy(1)

User.destroy(1, 2, 3)

你还可以这样删除数据。

affected_rows = User.where('votes', '>' 100).delete()

仅仅更新时间

如果你想更新模型的时间,可以使用touch方法。

user.touch()

时间Timestamps

在这个模型中created_atupdated_at是在数据库中默认生成的。如果,你不希望创建这两个字段,你可以设置属性__timestamps__false

class User(Model):

    __timestamps__ = False

提供自定义时间格式

如果,你希望自己定义时间格式,你可以这样操作。

class User(Model):

    def get_date_format():
return 'DD-MM-YY'

Python版的数据库查询构造器、ORM及动态迁移数据表。的更多相关文章

  1. python操作oracle数据库-查询

    python操作oracle数据库-查询 参照文档 http://www.oracle.com/technetwork/cn/articles/dsl/mastering-oracle-python- ...

  2. Python短小精悍的Orator查询构造器

    查询构造器 介绍 这个数据库查询构造器,提供便利的接口可以创建和执行查询操作,可以在大多数数据库中使用. 查询select操作 查询表中所有的数据. users = db.table('users') ...

  3. SQL查找数据库中所有没有主键的数据表脚本

    --SQL查找数据库中所有没有主键的数据表脚本 --运行脚本后在消息中可能会显示下面现象中的一种:--(1)数据库中所有数据表都有主键(则证明所有数据表都有主键)--(2)当前数据表[数据表名]没有主 ...

  4. 使用DB查询分析器实现异构数据源中数据表的相互访问

    1  引言   硕士程序员马根峰(CSDN专访马根峰:海量数据处理与分析大师的中国本土程序员)推出的个人作品----万能数据库查询分析器,中文版本DB 查询分析器.英文版本<DB Query A ...

  5. python连接mysql数据库,并进行添加、查找数据

    1.删除MySQL数据表中的记录 DELETE FROM table_name WHERE condition; python操作mysql1数据库 import pymysql # 连接mysql数 ...

  6. python自动化测试之mysql5.0版本数据库查询数据时出现乱码问题分析

    1.确保数据库编码是utf8编码.若不是,请将my.ini的client,mysql,mysqld三个字段下面添加default-character-set = utf8,这样可以永久改变在新建数据库 ...

  7. Python学习(21)python操作mysql数据库_操作

    目录 数据库连接 创建数据库表 数据库插入操作 数据库查询操作 数据库更新操作 删除操作 执行事务 错误处理 数据库连接 连接数据库前,请先确认以下事项: 您已经创建了数据库 TEST. 在TEST数 ...

  8. python操作mysql数据库实现增删改查

    Python 标准数据库接口为 Python DB-API,Python DB-API为开发人员提供了数据库应用编程接口. Python 数据库接口支持非常多的数据库,你可以选择适合你项目的数据库: ...

  9. Python 操作 SQL 数据库 (ORCAL)

    MySQLdb.connect是python 连接MySQL数据库的方法,在Python中 import MySQLdb即可使用,至于connect中的参数很简单:host:MySQL服务器名user ...

随机推荐

  1. 【并查集】关押罪犯(BSOJ2809)

    Description S城现有两座监狱,一共关押着N名罪犯,编号分别为1~N.他们之间的关系自然也极不和谐.很多罪犯之间甚至积怨已久,如果客观条件具备则随时可能爆发冲突.我们用“怨 气值”(一个正整 ...

  2. 20145229吴姗珊 《Java程序设计》第8周学习总结

    20145229吴姗珊 <Java程序设计>第8周总结 教材学习内容总结 第十四章 NIO与NIO2 NIO: InputStream.OutputStream的输入输出,基本上是以字节为 ...

  3. Python 变量(赋值,数据类型,数据类型转换)

    一.python 变量赋值方式有三种: 1.直接赋值:age = 28 2.多个变量赋值 age, sex = 28, 1  #每个变量都必须要有个对应的值 3.特殊形式的赋值(链式赋值)  a = ...

  4. 属性 visibility

    http://www.w3school.com.cn/cssref/pr_class_visibility.asp 可能的值 值 描述 visible 默认值.元素是可见的. hidden 元素是不可 ...

  5. RouterOS(ROS)简单限速/单IP限速脚

    暂无评论 有时企业环境,或个人使用环境需要针对不同IP设置较多条不同限速,可以使用以下脚本批量处理后,再针对性的修改. *脚本说明:“2 to 254”定义要设置受限IP的起始,后面“192.168. ...

  6. ACM学习历程—Hihocoder 1289 403 Forbidden(字典树 || (离线 && 排序 && 染色))

    http://hihocoder.com/problemset/problem/1289 这题是这次微软笔试的第二题,过的人比第三题少一点,这题一眼看过去就是字符串匹配问题,应该可以使用字典树解决.不 ...

  7. NOIP2018爆炸记

    又是一年\(NOIP\),可能是梦结束的地方? 之所以咕了这么久是得先确定自己不会退役,因为分太低了. 和去年一样在学校门前照了相,然后上车走了.高三回来考的只剩下\(p2oileen\)学姐了.新一 ...

  8. oracle sql性能

    1.查询所对象相关的表?V$LOCK, V$LOCKED_OBJECT, V$SESSION, V$SQLAREA, V$PROCESS ;查询锁的表的方法:SELECT S.SID SESSION_ ...

  9. 继承Application以实现全局资源共享

    原文地址:http://www.cnblogs.com/Dentist/p/Mr_Dentist_.html 每个程序运行时会创建一个Application类的对象且仅有一个.在app结束时这个App ...

  10. Sublime Text 全程指南(转载)

    摘要(Abstract) 本文系统全面的介绍了Sublime Text,旨在成为最优秀的Sublime Text中文教程. 更新记录 2014/09/27:完成初稿 2014/09/28: 更正打开控 ...