也许是最后一个python的分享,最近C++分布式群组聊天项目比较折腾。个人觉得这个库是比较通用的,那些在自己写数据库封装或者使用tornado db, dbutil这样的简单的db访问封装可以试试。
戳 https://github.com/thomashuang/dbpy
功能:
设计主要借鉴的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',)]
1
baoyexi 2015-01-14 11:28:34 +08:00 via iPhone
Pythonist | Pythonista | Pythoneer 但是没有 Pythoner 的说法。
|
3
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') 这样是不是更加简洁一些呢? |
4
lianghui OP @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注入 |
5
lianghui OP @mywaiting 附加: 那个and or 只是为了写比较复杂的and or组合,当然特别复杂的直接raw sql最好了。
|
6
geew 2015-01-14 14:23:10 +08:00
这代码看着好php的感觉...难道是我的错觉么
|
8
Comdex 2015-01-14 21:30:31 +08:00
我对C++分布式群组聊天项目比较感兴趣
|
9
stevegy 2015-01-15 14:50:40 +08:00
这个。。。为啥不用现成的sqlalchemy?
|
12
wingyiu 2015-01-18 17:28:24 +08:00
建议看看peewee
|