这说明从users表汇总查询出来了7条记录。但是,这似乎有点不友好,告诉我7条记录查出来了,但是在哪里呢,如果在\'mysql>\'下操作查询命令,一下就把7条记录列出来了。怎么显示python在这里的查询结果呢?
要用到游标对象的fetchall()、fetchmany(size=None)、fetchone()、scroll(value, mode=\'relative\')等方法。
>>> cur.execute("select * from users") 7L >>> lines = cur.fetchall()到这里,已经将查询到的记录赋值给变量lines了。如果要把它们显示出来,就要用到曾经学习过的循环语句了。
>>> for line in lines: ... print line ... (1L, u\'qiwsir\', u\'123123\', u\'qiwsir@gmail.com\') (2L, u\'python\', u\'123456\', u\'python@gmail.com\') (3L, u\'google\', u\'111222\', u\'g@gmail.com\') (4L, u\'facebook\', u\'222333\', u\'f@face.book\') (5L, u\'github\', u\'333444\', u\'git@hub.com\') (6L, u\'docker\', u\'444555\', u\'doc@ker.com\') (7L, u\'\u8001\u9f50\', u\'9988\', u\'qiwsir@gmail.com\')很好。果然是逐条显示出来了。列位注意,第七条中的u\'\u8001\u95f5\',这里是汉字,只不过由于我的shell不能显示罢了,不必惊慌,不必搭理它。
只想查出第一条,可以吗?当然可以!看下面的:
>>> cur.execute("select * from users where id=1") 1L >>> line_first = cur.fetchone() #只返回一条 >>> print line_first (1L, u\'qiwsir\', u\'123123\', u\'qiwsir@gmail.com\')为了对上述过程了解深入,做下面实验:
>>> cur.execute("select * from users") 7L >>> print cur.fetchall() ((1L, u\'qiwsir\', u\'123123\', u\'qiwsir@gmail.com\'), (2L, u\'python\', u\'123456\', u\'python@gmail.com\'), (3L, u\'google\', u\'111222\', u\'g@gmail.com\'), (4L, u\'facebook\', u\'222333\', u\'f@face.book\'), (5L, u\'github\', u\'333444\', u\'git@hub.com\'), (6L, u\'docker\', u\'444555\', u\'doc@ker.com\'), (7L, u\'\u8001\u9f50\', u\'9988\', u\'qiwsir@gmail.com\'))原来,用cur.execute()从数据库查询出来的东西,被“保存在了cur所能找到的某个地方”,要找出这些被保存的东西,需要用cur.fetchall()(或者fechone等),并且找出来之后,做为对象存在。从上面的实验探讨发现,被保存的对象是一个tuple中,里面的每个元素,都是一个一个的tuple。因此,用for循环就可以一个一个拿出来了。
接着看,还有神奇的呢。
接着上面的操作,再打印一遍
>>> print cur.fetchall() ()晕了!怎么什么是空?不是说做为对象已经存在了内存中了吗?难道这个内存中的对象是一次有效吗?
不要着急。
通过游标找出来的对象,在读取的时候有一个特点,就是那个游标会移动。在第一次操作了print cur.fetchall()后,因为是将所有的都打印出来,游标就从第一条移动到最后一条。当print结束之后,游标已经在最后一条的后面了。接下来如果再次打印,就空了,最后一条后面没有东西了。
下面还要实验,检验上面所说:
>>> cur.execute(\'select * from users\') 7L >>> print cur.fetchone() (1L, u\'qiwsir\', u\'123123\', u\'qiwsir@gmail.com\') >>> print cur.fetchone() (2L, u\'python\', u\'123456\', u\'python@gmail.com\') >>> print cur.fetchone() (3L, u\'google\', u\'111222\', u\'g@gmail.com\')