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_queries
为true
开启。
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)
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 一个奇形怪状的面试题:Bean中的CHM要不要加volatile?
· [.NET]调用本地 Deepseek 模型
· 一个费力不讨好的项目,让我损失了近一半的绩效!
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战