基本使用

配置

设置数据库配置参数,创建一个DatabaseManager实例。

from orator import DatabaseManager

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

如果多个不同的数据库,你可以指定默认的一个。

config = {
'default': 'mysql',
'mysql': {
'driver': 'mysql',
'host': 'localhost',
'database': 'database',
'user': 'root',
'password': '',
'prefix': ''
}
}

配置读写分离数据库

有的情况下我们需要配置读写分离数据库,一个数据库用来查询,另一个数据库用来插入、更新和删除。Orator可以很容易的实现。

config = {
'mysql': {
'read': {
'host': '192.168.1.1'
},
'write': {
'host': '192.168.1.2'
},
'driver': 'mysql',
'database': 'database',
'username': 'root',
'password': '',
'prefix': ''
}
}

需要注意:这里配置了read和write字典,这两个字典都有单独的host。数据库的database、user等配置都是共用的,如果需要单独配置,则配置到自己的字典里面和host一样。

执行查询

执行一个查询操作

results = db.select('select * from users where id = ?', [1])

这个查询语句的结果返回的一个list。

执行一个插入操作

db.insert('insert into users (id, name) values (?, ?)', [1, 'John'])

执行一个更新操作

db.update('update users set votes = 100 where name = ?', ['John'])

这一个操作返回更新的记录行数。

执行一个删除操作

db.delete('delete from users')

这一个操作返回删除的记录行数。

执行所有的操作

db.statement('drop table users')

数据库事务

执行一个数据库的事务,我们可以用以下的这种方式。

with db.transaction():
db.table('users').update({votes: 1})
db.table('posts').delete()

如果执行事务过程中有任何异常抛出,都将回滚。

还可以这样开启事务

db.begin_transaction()

回滚操作

db.rollback()

提交事务

db.commit()

使用数据库连接

当我们使用多个数据库连接的时候,可以指定其中一个连接。

users = db.connection('foo').table('users').get()

获取一个数据库连接实例

db.connection().get_connection()

重新连接建立一个连接

db.reconnect('foo')

关闭一个连接

db.disconnect('foo')

查询日志

Orator可以配置查询和执行的日志记录。通过设置log_queriestrue开启。

config = {
'mysql': {
'driver': 'mysql',
'host': 'localhost',
'database': 'database',
'username': 'root',
'password': '',
'prefix': '',
'log_queries': True
}
}

也可以这样设置

db.connection().enable_query_log()

现在,这个日志将在debug级别输出。

Executed SELECT COUNT(*) AS aggregate FROM "users" in 1.18ms

Executed INSERT INTO "users" ("email", "name", "updated_at") VALUES ('foo@bar.com', 'foo', '2015-04-01T22:59:25.810216'::timestamp) RETURNING "id" in 3.6ms

自定义日志

import logging

logger = logging.getLogger('orator.connection.queries')
logger.setLevel(logging.DEBUG) formatter = logging.Formatter(
'It took %(elapsed_time)sms to execute the query %(query)s'
) handler = logging.StreamHandler()
handler.setFormatter(formatter) logger.addHandler(handler)

Python短小精悍的Orator基本使用技巧的更多相关文章

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

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

  2. python爬虫抓站的一些技巧总结

    使用python爬虫抓站的一些技巧总结:进阶篇 一.gzip/deflate支持现在的网页普遍支持gzip压缩,这往往可以解决大量传输时间,以VeryCD的主页为例,未压缩版本247K,压缩了以后45 ...

  3. Python 内编写类的各种技巧和方法

    Python 内编写类的各种技巧和方法 简介 有关 Python 内编写类的各种技巧和方法(构建和初始化.重载操作符.类描述.属性访问控制.自定义序列.反射机制.可调用对象.上下文管理.构建描述符对象 ...

  4. Python 安装 第三方库的安装技巧

    Python 安装 第三方库的安装技巧 我的电脑:Windows 10 64位. Python IDE 软件:PyCharm 2016.1.4 Python version : Python 3.5. ...

  5. 转载:用python爬虫抓站的一些技巧总结

    原文链接:http://www.pythonclub.org/python-network-application/observer-spider 原文的名称虽然用了<用python爬虫抓站的一 ...

  6. 【转载】 python sort、sorted高级排序技巧

    这篇文章主要介绍了python sort.sorted高级排序技巧,本文讲解了基础排序.升序和降序.排序的稳定性和复杂排序.cmp函数排序法等内容,需要的朋友可以参考下 Python list内置so ...

  7. Python中编写类的各种技巧和方法

    简介 有关 Python 内编写类的各种技巧和方法(构建和初始化.重载操作符.类描述.属性访问控制.自定义序列.反射机制.可调用对象.上下文管理.构建描述符对象.Pickling). 你可以把它当作一 ...

  8. 用python爬虫抓站的一些技巧总结 zz

    用python爬虫抓站的一些技巧总结 zz 学用python也有3个多月了,用得最多的还是各类爬虫脚本:写过抓代理本机验证的脚本,写过在discuz论坛中自动登录自动发贴的脚本,写过自动收邮件的脚本, ...

  9. Python高效编程的19个技巧

    初识Python语言,觉得python满足了我上学时候对编程语言的所有要求.python语言的高效编程技巧让我们这些大学曾经苦逼学了四年c或者c++的人,兴奋的不行不行的,终于解脱了.高级语言,如果做 ...

随机推荐

  1. 现有exe转为服务_方式01

    1.安装X.exe服务: ...>路径\X.exe /install 2.卸载X.exe服务: ...>路径\X.exe /uninstall 3.开始运行XX(程序是X.exe,服务名是 ...

  2. DIV+CSS IE6/IE7/IE8/FF兼容问题大全

    1. [代码][CSS]代码 1, FF下给 div 设置 padding 后会导致 width 和 height 增加, 但IE不会.(可用!important解决) 2, 居中问题. 1).垂直居 ...

  3. zookeeper+dubbo问题

    1.java.lang.IllegalStateException: Context namespace element 'component-scan' and its parser class [ ...

  4. 数据库+maven

    1.mysql <dependency> <groupId>mysql</groupId> <artifactId>mysql-connector-ja ...

  5. Hibernate学习---第十三节:hibernate过滤器和拦截器的实现

    一.hibernate 过滤器 1.在持久化映射文件中配置过滤器,代码如下: <?xml version="1.0"?> <!DOCTYPE hibernate- ...

  6. json与jsonp详解

     前言: 说到AJAX就会不可避免的面临两个问题,第一个是AJAX以何种格式来交换数据?第二个是跨域的需求如何解决?这两个问题目前都有不同的解决方案,比如数据可以用自定义字符串或者用XML来描述,跨域 ...

  7. io.js的六大新特性

    io.js是nodejs的友好版的分支("friendly fork”).它支持npm中所有的同样模块,且使用了v8最新版本的截取(v8是被node.js使用js解释器),且修复了很多的bu ...

  8. Oracle中spool命令实现的两种方法比较

    ---恢复内容开始--- 要输出符合要求格式的数据文件只需在select时用字符连接来规范格式.比如有如下表 SQL>; select id,username,password from myu ...

  9. 记一次编译tensorflow-gpu爬过的坑

    废话不多说,先说最终成功的版本:系统=>centos7 ,cuda=>10.0 ,cudnn=>7.5 ,nccl=>源码编译, tensorflow=>最新版本源码编译 ...

  10. 基于433MHz无线串口,多发一收解决方案

    一.无线发展背景 随着科学技术的飞速发展,智能家居.智慧农业.智慧城市如雨后春笋.而这些行业的发展离不开无线的应用. 传统的有线连接不仅仅是成本高,包括布线安装.维护等也是成本巨大.并且机动性也很差, ...