`

在tornado的database.py基础上封装了一个Python的DAL出来,召集帮忙测试的同学

阅读更多
tornado内部化包含了一个很简陋的database.py,最近在这个简单封装了MysqlDb的模块基础上增加增强的功能。
对于Python这种动态语言来说我觉得ORM有点过度封装了,很多时候简单的数据操作不好用,太复杂的操作又不如直接写Sql,所以我放弃了Orm的方式,而是直接抽象了Sql的构建,现在的版本支持单表的sql查询,支持子查询,当然还有一些操作有所遗漏,我会继续向项目里追加。
下载地址:http://files.cnblogs.com/Alexander-Lee/database.py.zip
文档:
Quick start
假设建立表User
create table `user`(
`id` bigint(20) AUTO_INCREMENT,
`name` varchar(20),
`age` int(10),
`birth` datetime,
)

创建连接:
db=Connection(host='127.0.0.1',database='testdb',user='root',password='xxxxx')

基本sql操作
--------------------------------------------------------------------------
查询多行
(打印年龄大于18的用户名)
for row in db.query('select * from user where age>%s',18)
    print row.name
查询单行
(获取id=5的用户)
user=db.query('select * from user where id=%s',5)

执行sql
(更新生日大于等于8月23日的用户年龄+1)
db.query('update user set age=age+1 where DATE_FORMAT(birth,'%%Y-%%m-%%d')>=%s','2010-08-23')

插入记录
db.insert('user',name='alex',age=28,birth='1981-08-31')
--------------------------------------------------------------------------
无sql操作

step 1 获取表对象
t = db.user
step 2 创建一个查询
q=t(t.age>18)         #用户年龄大于18岁的查询
在这个查询的基础上可以进行下一步的操作,在这个筛选数据条件基础上对筛选出来的数据进行查询、更新、删除的操作
查询条件可以多个组合,比如
(t.age>18)&(t.age<30)|(t.id<500)
组合出来的条件就是 age>18 and age<30 or id<500

1,查询:
for user in q.select.sort(birth="DESC")():
    print user.name
根据birth字段取倒序,查询出所有的age>18的用户,打印出用户名

查询分页  q.select.sort(birth="DESC")[2:10]() #按页大小20,取第二页的数据

2,更新:
(更新生日大于等于8月23日的用户年龄+1)
t=db.user
q=t(t.birth.DL('%%Y-%%m-%%d','2010-08-23'))
q.update(t.age==t.age+1)

3.删除
在查询的基础上还可以对查询出的结果直接删除掉,比如
q.delete()


API reference

Connection 对象
构造器参数:
host='服务器ip/域名',database='Schame名',user='登录用户',password='密码'
例子:db=Connection(host='127.0.0.1',database='testdb',user='root',password='xxxxx')

方法(名称后带*的是tornado原有database.py中原有的方法,不带*的是扩展的方法):

名称:execute *
参数:(sql,[params])
返回值:执行sql影响的数据行数
用途:执行不返回结果集的sql
例子:db.execute('update testtable set col1=%s where id=%s','haha',1)

名称:executemany *
参数:(sql,[params])
返回值:执行sql影响的数据行数
用途:同时执行多条不返回结果集的sql
例子:db.execute('update testtable set col1=%s where id=%s;update user set age=1 where,id=1','haha',1)

名称:get *
参数:(sql,[params])
返回值:Row对象(见Row对象部分)
用途:返回单行结果
例子:user=db.get('select * from user where id=%s',1)

名称:query *
参数:(sql,[params])
返回值:Row对象列表
用途:返回多行结果
例子:users=db.query('select * from user where id<%s',5)

名称:count
参数:(sql,[params])
返回值:count函数返回的结果
用途:通过sql取记录数
例子:c=db.count('select count(1) from user where age>%s',18)

名称:insert
参数:(tablename,**dict(字段名=值))
用途:插入记录
例子:db.insert('user',name='alex',age=28,)

名称:commit *
参数:无
返回值:无
用途:提交事务,由于不是auto commit的连接,所以对数据库的更新都需要手动commit才能生效
例子:db.commit()

名称:rollback *
参数:无
返回值:无
用途:回滚事务
例子:db.rollback()

名称:fromQuery
参数:Select对象
返回值:TableQueryer对象
用途:得到一个基于已有查询的TableQueryer对象
例子:t2=db.fromQuery(q1)

Row对象
查询的结果集都由Row对象进行封装,Row对象是一个字典,Key是数据库字段名,Value是字段的值,可以通过属性访问字典的Key

TableQueryer对象
通过Connection对象创建
有两种方式:
1: db.tablename    #获取tablename这个表的TableQueryer对象
2: db.fromQuery(q) #通过已经存在的查询获取一个TableQueryer对象,实现子查询
用途:
1:获取字段条件对象  (conds对象)
   例子:t=db.tablename
        t.col1

2:获取查询的执行对象 (Operater对象)
   例子:t=db.tablename
        q=t(t.col1>5)  #需要加入查询条件来创建

方法:
名称:get_one
参数:conds对象
返回值:Row对象
用途:获取表中单条记录
例子:user=db.user.get_one(db.user.id==5)

名称:insert
参数:**dict(字段名=值)
返回值:是否成功
用途:插入记录到该表
例子:db.tablename.insert(col1=123,col2='abc')

Operater对象
通过调用TableQueryer对象创建
属性:
select:返回Select对象
update:返回Update对象
delete:返回Delete对象
insert:返回Insert对象

Select对象
生成select的sql,收集参数,并执行返回多行结果集

方法:
名称:group_by
参数:*conds对象
返回值:Select对象
用途:加入group by操作的设定
例子:q=db.tablename(db.tablename.col1>5)
     q.select.group_by(db.tablename.age)
sql:select * from tablename where col1>5 group by age

名称:having
参数:conds对象
返回值:Select对象
用途:加入having设定
例子:q=db.tablename(db.tablename.col1>5)
     q.select.group_by(db.tablename.age).having(db.tablename.col2.count>6)
sql:select * from tablename where col1>5 group by age having count(col2)>6
备注:必须在调用了group_by的前提下才能调用having,否则having条件不生效

名称:collect
参数:*conds
返回值:Select对象
用途:设定要筛选出的字段
例子:q=db.tablename(db.tablename.col1>5)
     q.select.collect(db.tablename.col1,db.tablename.col12)
sql:select col1,col2 from tablename where col1>5

名称:limit
参数:start,count
返回值:Select对象
用途:设定limit参数
例子:q=db.tablename(db.tablename.col1>5)
     q.select.collect(db.tablename.col1,db.tablename.col12).limit(10,10)
sql:select col1,col2 from tablename where col1>5 limit 10,10

名称:get_sql
参数:无
返回值:生成的sql语句
用途:返回生成的sql语句

分页:
对Select对象切片操作即可设定分页参数
比如:q=db.tablename(db.tablename.col1>5)
     q.select.collect(db.tablename.col1,db.tablename.col12)[2:10]
则是设定,页大小是10条记录,取地2页

执行sql:
直接执行Select对象
比如:q=db.tablename(db.tablename.col1>5)
     s=q.select.collect(db.tablename.col1,db.tablename.col12)[2:10]
     rs=s()

Update对象:
用于生成Update语句更新记录
例子:
    q=db.tablename(db.tablename.col1>5)
    q.update(db.tablename.col3==db.tablename.col3+5)
sql:update tablename set col3=col3+5 where col1>5

Delete对象
用于生成Delete语句
例子:
    q=db.tablename(db.tablename.col1>5)
    q.delete()
sql:delete from tablename where col1>5

Insert对象
用于生成insert语句
例子:
    q=db.tablename(db.tablename.col1>5)
    q.insert(col1=1,col2='abc')

conds对象
字段定义以及字段关系条件的定义对象
通过TableQueryer对象的属性获取新的对象
比如: t=db.tablename
      t.col1
操作符:
==:赋值或者相等比较,比如 t.col1==5 生成sql col=%s 且在参数列表中加入值5
>:生成sql col>%s
<:生成sql col<%s
>=:生成sql col>=%s
<=:生成sql col<=%s
!=:生成sql col<>%s
&:将两个条件取and关系,比如 (t.col1==5)&(t.col2<20) 生成sql col1=%s and col2<%s
|:将两个条件取or关系

方法:

名称:like
参数:任意对象
返回值:conds对象
用途:生成sql col like %s

名称:In
参数:列表或者Select对象
返回值:conds对象
用途:生成IN 语句

名称:Not_In
参数:列表或者Select对象
返回值:conds对象
用途:生成IN 语句

名称:DL
参数:格式化字符串,时间值
返回值:conds对象
用途:时间字段大于等于给定值
例子:t.col1.DL('%%Y-%%m-%%d','2010-10-20')
SQL: DATE_FORMAT(col1,'%%Y-%%m-%%d')>=%s

名称:DG
参数:格式化字符串,时间值
返回值:conds对象
用途:时间字段小于等于给定值
例子:t.col1.DG('%%Y-%%m-%%d','2010-10-20')
SQL: DATE_FORMAT(col1,'%%Y-%%m-%%d')<=%s

名称:DE
参数:格式化字符串,时间值
返回值:conds对象
用途:时间字段等于给定值
例子:t.col1.DE('%%Y-%%m-%%d','2010-10-20')
SQL: DATE_FORMAT(col1,'%%Y-%%m-%%d')=%s
分享到:
评论

相关推荐

    Python 2.7,离线安装合集tornado,backports_abc,certifi,ordereddict,six

    Python 2.7,离线安装 合集 tornado-4.4.2,python2-backports_abc-0.5-2,python-backports-ssl_match_hostname-3.5.0.1-1,python2-certifi-2016.9.26-2,future-0.15.1.tar.gz,future-0.17.1.tar.gz,python-...

    Tornado教程.pdf

    Tornado 是一个 Python 开发的 Web 框架和异步网络库,它以其高性能、非阻塞 I/O 和可扩展性而闻名。Tornado 起源于 FriendFeed 团队的需求,后来被 Facebook 收购并开源,现在是开源社区的一个重要项目。在 Python ...

    股票分析系统源码,基于python,tornado框架.zip

    综上所述,这个基于Python和Tornado框架的股票分析系统源码涉及了多种编程技术和金融分析方法,对于想要学习股票分析软件开发的人来说,这是一个很好的学习资源。开发者可以通过深入研究这个源码,了解如何构建一个...

    tornado-5.0.2.tar.gz及tornado-4.1.tar.gz及tornado-1.2.1.tar.gz

    Tornado是一款开源的Python Web框架和异步网络库,它由Facebook的FriendFeed团队开发,并在2009年开源。Tornado以其高并发、低延迟的特性在Web开发领域中受到广泛的关注,尤其适用于实时Web服务,如聊天、推送通知、...

    tornado python web开发

    作为Web框架,是一个轻量级的Web框架,类似于另一个Python web框架Web.py,其拥有异步非阻塞IO 的处理方式。 作为Web服务器,Tornado 有较为出色的抗负载能力,官方用nginx反向代理的方式部署Tornado和其它 Python ...

    Python库 | tornado_eventsource-0.1.4.tar.gz

    Python库Tornado EventSource是Python开发中的一个关键组件,它主要与Tornado Web框架结合使用,提供了对服务器发送事件(Server-Sent Events, SSE)的支持。SSE是一种允许服务器向客户端持续推送数据的机制,无需...

    tornado 4.0.1 python framework guide

    `tornado.platform.asyncio` 模块提供了一个桥接模块,使得 Tornado 可以与 Python 的 asyncio 库协同工作。这对于需要同时使用这两个库的开发者来说非常有用。 **4.3 tornado.platform.caresresolver — 使用 C-...

    tornado docs.pdf

    Tornado是一个Python编写的开源网络框架和异步网络库,最初由FriendFeed开发。Tornado以其非阻塞网络I/O和可扩展性而闻名,能够支持数以万计的开放连接,非常适合需要与每个用户维持长期连接的应用程序,比如长轮询...

    python测验,hello-tornado.rar

    Python测验中的“hello-tornado.rar”文件是一个与Python编程语言和Tornado Web框架相关的学习资源。Tornado是一个开源的、高性能的Web服务器和异步网络库,最初由FriendFeed团队开发,后来被Facebook收购并公开发布...

    Python库 | pullkin-0.4.1a3-py2.py3-none-any.whl

    综上所述,"pullkin-0.4.1a3-py2.py3-none-any.whl" 是一个跨Python版本的库,用于Python开发,特别是后端工作。要充分利用这个库,开发者需要了解其具体功能,这通常通过阅读官方文档、查看源代码或参与社区讨论来...

    Python库 | tornado_widgets-0.0.31-py3-none-any.whl

    资源分类:Python库 所属语言:Python 资源全名:tornado_widgets-0.0.31-py3-none-any.whl 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059

    Python库 | moesiftornado-0.1.2-py2.py3-none-any.whl

    "Python库 | moesiftornado-0.1.2-py2.py3-none-any.whl" 是一个Python软件包,其名称暗示了它是一个与Tornado框架相关的扩展或工具。Tornado是一个开源的、高性能的Web服务器和网络应用框架,特别适合编写异步网络...

    Python库 | niet-0.1.0-py2.py3-none-any.whl

    "niet-0.1.0-py2.py3-none-any.whl" 是一个Python库的封装文件,名为“niet”,版本为0.1.0。这个文件是一种特殊格式的归档,用于方便地分发和安装Python库。 **Python Wheel文件** "niet-0.1.0-py2.py3-none-any....

    Python Tornado 中文教程

    我们开发这个 Web 服务器的主要目的就是为了处理 FriendFeed 的实时功能 ——在 FriendFeed 的应用里每一个活动用户都会保持着一个服务器连接。(关于如何扩容 服务器,以处理数以千计的客户端的连接的问题,请参阅 ...

    Python库 | spell-0.40.5-py2.py3-none-any.whl

    标题提到的"spell-0.40.5-py2.py3-none-any.whl"是一个Python库的特定版本,名为"spell",版本号为0.40.5。该库可能专注于拼写检查、校正或相关的自然语言处理任务。 **wheel文件格式** ".whl"是Python的二进制包...

    Python+tornado+mysql 测试学习项目.zip

    在这个“Python+tornado+mysql 测试学习项目”中,我们可以深入探索如何使用Python编程语言、Tornado Web框架和MySQL数据库来构建一个完整的Web应用程序。这是一个非常实用的学习资源,适合那些想要提升自己在Web...

    tornado(python)实现样例代码.

    例如,在 `tornadoT1` 中可能有一个名为 `MainHandler` 的类,继承自 `tornado.web.RequestHandler`,并重写 `get` 或 `post` 方法来响应 GET 或 POST 请求。 2. **路由配置** 在 Tornado 中,应用的路由配置通常...

    Python库 | pcrunner-0.4.0-py2.py3-none-any.whl

    `pcrunner-0.4.0-py2.py3-none-any.whl` 是一个与Python相关的库,主要用于后端开发。这个文件是一个Python Wheel(轮子)格式的包,它是Python社区广泛使用的预编译软件包格式,允许开发者快速安装和分发Python模块...

    Python库 | gencove-2.0.28-py2.py3-none-any.whl

    `gencove-2.0.28-py2.py3-none-any.whl` 是一个针对Python编程语言的库,名为Gencove的特定版本(2.0.28)。这个`.whl`文件是一种预编译的Python软件包格式,用于简化安装过程,它包含了库的所有必要组件,使得...

    tornado_documentation_release3.2.2.pdf

    tornado.platform.caresresolver提供了一个异步的DNS解析器,利用C-Ares库实现。tornado.websocket模块允许与浏览器之间进行双向通信。tornado.wsgi模块提供了与其他Python框架和服务器之间的互操作性。 最后,...

Global site tag (gtag.js) - Google Analytics