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)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM