python连接MySQL

    由于之后要做一些统计数据库的工作,所以趁着晚上有空,先提前学一下一直想学的python连接数据库的基本操作。

    用python连接数据库的操作其实非常简单,直接调用MySQLdb模板,使用其中的connection()方法即可。现在就一些重要的操作做一下记录。

一,用python连接数据库。

import MySQLdb

conn = MySQLdb.connection(host = "xxx.xxx.xxx.xx",
                          user = "user_name",
                          password = "password",
                          db = "db_name"
                         )

    完成这一步,其实已经获得了一个代表数据库的对象conn了。接下来就是利用一些方法对数据库进行操作。

二,与数据库进行交互操作。

  1,如果后台允许,可以切换其他数据库。

conn.select("db_name")

  2, 利用conn.cursor()获得一个指针对象,用于访问和操作数据库。

cur = conn.cursor()

   经过2之后就能获得指向数据库数据的指针,接下来就可以进行交互了。

   3,首先是利用execute()方法执行sql语句

>>> cur = conn.cursor()
>>> cur
<MySQLdb.cursors.Cursor object at 0x7ff6698ee1d0>
>>> sql = "desc image_tag"
>>> res = cur.execute(sql)
>>> res
12L

execute返回的是从sql语句中得到的行数。

   4,利用fetchall()方法和fetchone()方法读取数据库的行内容。

    从名字中可以看出来,fetchall是获得是执行sql语句得到的所有行数,fetchone则是获得当前行,并别会把指针往后移动。 

     两个方法的返回值都是一个tuple。 

>>>res = cur.execute("select * from testPython")
>>> res
7L
>>> row = cur.fetchone()
>>> row
(1L, 'zhao')
>>> res = cur.fetchall()
>>> res
((10L, 'demno'), (10L, 'demno'), (10L, 'demno'), (10L, 'demno'), (10L, 'demno'), (10L, 'demno'))

   从代码中可以看出,res一开始获得是7行数据,经过fetchone之后,再用fetchall只能获得6个元素的元组,说明了指针往后移动了。

  5,当然,我们可以利用scroll()函数移动指针。

   cur.scroll(step, model)

   step:移动的行数,int型,正表示向下移,负值表示向上移动

   model:移动的模式,默认是relative,还有absolute模式。

>>> cur.scroll(-1, 'relative')
>>> cur
<MySQLdb.cursors.Cursor object at 0x7ff6698ee390>
>>> res = cur.fetchall()
>>> res
((10L, 'demno'),)

  这部分代码是接在4中的代码继续的。可以看出,当我们将行数往上移动一步,再进行fetchall的时候只能得到一行。这其实也反应了一个问题,fetchall()方法也是取得所有的行数,并将指针移动到最后一行的。

  关于fetchall()这个的解释可以参见http://blog.libears.com/2011-05-20/python/python%E4%B8%AD%E7%9A%84%E6%B8%B8%E6%A0%87

  6,conn.commit() ,在我们用execute()方法执行了insert或者delete操作的时候,需要调用这个方法向数据库进行提交事务,才能最终生效。

conn.commit()

  当然,还有一些释放资源的方法,比如conn.close()等。

  以上只是一些零碎的代码,实际的程序中,还需要进行一些异常捕获,下面贴一个标准模板化的代码。感谢http://www.cnpythoner.com/post/150.html提供代码模板。

import MySQLdb
def getdata ():
    try:
        conn = MySQLdb.connect(host='localhost', user='root', passwd='root', db='test', port=3306, charset='utf8')
        try:
            cur = conn.cursor()
            sql = r'select * from person'
            cur.execute(sql)
            allPerson = cur.fetchall()
        finally:
            cur.close()
            conn.close()
    except Exception, e:
        print '数据库错误:', e
        return

 

参考文章

http://www.linuxfly.org/post/180/

http://www.2cto.com/kf/201009/74972.html

http://blog.libears.com/2011-05-20/python/python%E4%B8%AD%E7%9A%84%E6%B8%B8%E6%A0%87

http://www.cnpythoner.com/post/150.html

 

posted @ 2012-07-24 22:15  Phoenix_Zhao  阅读(536)  评论(0编辑  收藏  举报