zoukankan      html  css  js  c++  java
  • Python短小精悍的Orator基本使用技巧

    基本使用

    配置

    设置数据库配置参数,创建一个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)
    
  • 相关阅读:
    linux 邮件服务器
    Nginx学习之keepalive
    explain 和 desc 详解
    mysql 常用语句
    loop设备及losetup命令
    cryptsetup文件系统加密
    ftp主动与被动模式详解
    大型网站关键技术
    大访问量网站架构设计
    Mysql 的事务隔离级别
  • 原文地址:https://www.cnblogs.com/yxhblogs/p/9784704.html
Copyright © 2011-2022 走看看