分享 给 pythoner 简单好使的数据库访问库 dbpy

2015-01-14 11:26:28 +08:00
 lianghui

也许是最后一个python的分享,最近C++分布式群组聊天项目比较折腾。个人觉得这个库是比较通用的,那些在自己写数据库封装或者使用tornado db, dbutil这样的简单的db访问封装可以试试。

https://github.com/thomashuang/dbpy

功能:

  1. 灵活简单
  2. 天马行空的SQL构建语法糖
  3. 线程安全的连接池
  4. 好使的读写分离
  5. 支持简单事务

设计主要借鉴的php的drupal database的设计。设计模式和以前写的项目差不多更像c/c++系项目风格,主要使用单例,工厂和适配设计模式,不过稍稍的pythonic了下。

贴一段代码:

or_cond = db.or_().condition('field1', 1).condition('field2', 'blabla')
and_cond = (db.and_().condition('field3', 'what')
             .condition('field4', 'then?'))
print (db.select('table_name').condition(or_cond)
                .condition(and_cond))

# > SELECT * FROM `table_name`
# > WHERE  ( `field1` = %s OR `field2` = %s ) AND ( `field3` = %s AND `field4` = %s )


q = (db.insert('users').fields('name').values({'name': 'insert_1'})
                   .values(('insert_2',)))
# > INSERT INTO `users` (`name`) VALUES(%s)
print q._values 
# > [('insert_1',) ('insert_2',)]
3316 次点击
所在节点    分享创造
13 条回复
baoyexi
2015-01-14 11:28:34 +08:00
Pythonist | Pythonista | Pythoneer 但是没有 Pythoner 的说法。
lianghui
2015-01-14 11:29:33 +08:00
@baoyexi 恩,好吧,谢谢提醒。纠正
mywaiting
2015-01-14 12:00:21 +08:00
有个有点相似的 https://github.com/PaulGuo/F2E.im/blob/master/lib/query.py

那个 and_ 和 or_ 语句感觉有些过度设计了,直接增加一个 where 的功能,然后这样传入:

db.select('table_name').where('a = 1 AND b = 2')

这样是不是更加简洁一些呢?
lianghui
2015-01-14 12:19:25 +08:00
@mywaiting 关键是python db api规范参数预处理绑定比较蛋疼,那个如果需要参数转义反注入怎么办。 那种简单真的不如 db.query('SELECT * FROM tabel_name where a=%s and b=%s', (a, b))

或者 db.select('table_name').condition('a', 1).condition('b', 2) 这样至少做会做转义防止sql注入
lianghui
2015-01-14 12:24:03 +08:00
@mywaiting 附加: 那个and or 只是为了写比较复杂的and or组合,当然特别复杂的直接raw sql最好了。
geew
2015-01-14 14:23:10 +08:00
这代码看着好php的感觉...难道是我的错觉么
lianghui
2015-01-14 14:25:19 +08:00
@geew 借鉴了drupal的设计。
Comdex
2015-01-14 21:30:31 +08:00
我对C++分布式群组聊天项目比较感兴趣
stevegy
2015-01-15 14:50:40 +08:00
这个。。。为啥不用现成的sqlalchemy?
lianghui
2015-01-15 18:36:44 +08:00
@Comdex 这个没成型,纯属意淫。
lianghui
2015-01-15 18:37:35 +08:00
@stevegy 恩,sqlalchemy是个选择
wingyiu
2015-01-18 17:28:24 +08:00
建议看看peewee
lianghui
2015-01-18 20:25:33 +08:00
@wingyiu 大概是一年半前看过这个库,那时好像还没有实现连接池。 这类是orm简单架构,dbpy是数据库访问层封装。 不过有个问题不知道又没考虑过,就是记录模型这类设计,如果需要切换nosql比如couchdb这类,是不是意味着很多东西需要重写?

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/162010

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX