python数据库编程

来源:互联网 发布:韩国古代历史 知乎 编辑:程序博客网 时间:2024/05/21 02:33

1、mysql的安装
www.mysql.com/downloads/

2、python的安装
https://www.python.org/

3、MySQL_python-1.2.5-cp27-none-win_amd64.whl,mysqlclient-1.3.8-cp27-cp27m-win_amd64.whl 的安装
(1)下载两个文件
(2)使用pip install MySQL_python-1.2.5-cp27-none-win_amd64.whl就可以进行安装了

4、python上mysql编程

(1)获取mysql的版本信息

# python获取mysql版本信息# -*- coding: UTF-8 -*-# 安装 MYSQL DB for pythonimport MySQLdb as mdbcon = Nonetry:    # 连接 mysql 的方法: connect('ip','user','password','dbname')    con = mdb.connect('localhost', 'root', 'mysql', 'test')    # 所有的查询,都在连接 con 的一个模块 cursor 上面运行的    cur = con.cursor()    # 执行一个查询    cur.execute("SELECT VERSION()")    # 取得上个查询的结果,是单个结果    data = cur.fetchone()  # 取出一个    print "Database version : %s " % datafinally:    if con:        # 无论如何,连接记得关闭        con.close()

output:

Database version : 5.5.29 

(2)创建一个表并插入数据

# -*- coding: UTF-8 -*-import MySQLdb as mdbimport sys# 将 con 设定为全局连接con = mdb.connect('localhost', 'root', 'mysql', 'test')with con:    # 获取连接的 cursor,只有获取了 cursor,我们才能进行各种操作    cur = con.cursor()    # 创建一个数据表 writers(id,name)    cur.execute("CREATE TABLE IF NOT EXISTS Writers(Id INT PRIMARY KEY AUTO_INCREMENT, Name VARCHAR(25))")    # 以下插入了 5 条数据    cur.execute("INSERT INTO Writers(Name) VALUES('Jack London')")    cur.execute("INSERT INTO Writers(Name) VALUES('Honore de Balzac')")    cur.execute("INSERT INTO Writers(Name) VALUES('Lion Feuchtwanger')")    cur.execute("INSERT INTO Writers(Name) VALUES('Emile Zola')")    cur.execute("INSERT INTO Writers(Name) VALUES('Truman Capote')")    # 类似于其他语言的 query 函数, execute 是 python 中的执行查询函数    cur.execute("SELECT * FROM Writers")    # 使用 fetchall 函数,将结果集(多维元组)存入 rows 里面    rows = cur.fetchall()    # 依次遍历结果集,发现每个元素,就是表中的一条记录,用一个元组来显示    for row in rows:        print row

output:

(1L, 'Jack London')(2L, 'Honore de Balzac')(3L, 'Lion Feuchtwanger')(4L, 'Emile Zola')(5L, 'Truman Capote')(6L, 'Jack London')(7L, 'Honore de Balzac')(8L, 'Lion Feuchtwanger')(9L, 'Emile Zola')(10L, 'Truman Capote')...

(3)使用select语句获取表的数据

# -*- coding: UTF-8 -*-import MySQLdb as mdb# 获取mysql的连接对象con = mdb.connect('localhost', 'root', 'mysql', 'test')with con:    # 获取执行查询的对象    cur = con.cursor()    # 执行查询,使用select语句    cur.execute("select * from writers")    # 使用cur.rowcount 获取结果集的条数    numrows = int(cur.rowcount)    print numrows    # 循环 numrows 次,每次取出一行数据    for i in range(0, numrows):        row = cur.fetchone()        print row[0], row[1]

(4)使用字典 cursor 取得结果集

# -*- coding: UTF-8 -*-import MySQLdb as mdb# 获取mysql查询链接对象con = mdb.connect('localhost', 'root', 'mysql', 'test')with con:    # 获取字典cursor    cur = con.cursor(mdb.cursors.DictCursor)    # 执行语句不变    cur.execute("select * from Writers")    # 获取数据方法不变    rows = cur.fetchall()    print rows  # rows以字典方式存储    # 按照键值对输出    for row in rows:        print "%s %s" % (row['Id'], row['Name'])

output:

1 Jack London2 Honore de Balzac3 Lion Feuchtwanger4 Emile Zola5 Truman Capote6 Jack London7 Honore de Balzac8 Lion Feuchtwanger9 Emile Zola10 Truman Capote...

(5)更新writers的数据

# -*- coding:UTF-8 -*-import MySQLdb as mdb'''更新writers的数据'''con = mdb.connect('localhost', 'root', 'mysql', 'test')with con:    cur = con.cursor()    cur.execute("select * from writers")    row = cur.fetchall()    print "before update:"    print row[3][0], row[3][1]    print    cur.execute("UPDATE Writers SET Name=%s WHERE Id = %s", ("Guy Maupasant", "4"))    print "Number of rows updated:%d" % cur.rowcount    cur.execute("select * from writers")    rows = cur.fetchall()    # print rows    print "after update:"    print rows[3][0], rows[3][1]    # for row in rows:    #     print row

output:

before update:4 Guy de MaupasantNumber of rows updated:1after update:4 Guy Maupasant

(6)获取单个表的字段名和信息的方法

# -*- coding: UTF-8 -*-import MySQLdb as mdb'''获取单个表的字段名和信息的方法'''# 获取数据库对象con = mdb.connect('localhost', 'root', 'mysql', 'test')with con:    # 获取普通的查询    cur = con.cursor()    # 执行查询操作    cur.execute("select * from writers")    # 获取所有行    rows = cur.fetchall()    print rows    print    # 获取连接对象的描述信息    desc = cur.description    print "cur.description:", desc    print    # 打印表头,就是字段名字    print "%s %s" % (desc[0][0], desc[1][0])    print    # 打印结果    for row in rows:        print "%s %s" % row

output:

cur.description: (('Id', 3, 2, 11, 11, 0, 0), ('Name', 253, 17, 25, 25, 0, 1))Id Name1 Jack London2 Honore de Balzac3 Lion Feuchtwanger4 Guy Maupasant5 Truman Capote...

(7)创建一个数据库python,并创建表test,插入100条数据

# -*- coding:UTF-8 -*-import MySQLdb as mdb'''创建一个数据库python,并创建表test,插入100条数据'''con = mdb.connect('localhost', 'root', 'mysql')with con:    cur = con.cursor()    cur.execute("create database python")    cur.execute("use python")    cur.execute("create table test(id int, content VARCHAR(100))")    for i in range(1, 101):        cur.execute("insert into test VALUES(%s, %s)",[i, 'haha'])    cur.execute("select * from test")    rows = cur.fetchall()    for row in rows:        print row

(8)函数解析

'''    connect()函数:        生成一个connect对象,用于访问数据库,其参数如下:user, password, host, database    connect()对象方法:        close():关闭数据库连接,或者关闭游标对象        commit():提交当前事务        rollback():取消当前事务        cursor():创建游标或类游标对象        errorhandler(cxn, errcls, errval):作为已给游标的句柄    注意:执行close()方法则上述的连接对象方法不能再使用,否则发生异常。         commit()、rollback()、cursor()或许更对于支持事务的数据库更有意义。         数据库事务,是指作为单个逻辑工作单元执行的一系列操作,要么完整执行,要么完全不执行。         一旦完成了数据库连接,关闭了游标对象,然后在执行commit()提交操作,然后关闭连接。    cursor()游标对象的属性和方法:        fetchone():fetch(取出)one(一个),也就是得到结果集的下一行        fetchmany(size):fetch(取出)many(多个)        fetchall:fetch(取出)all(所有)        execute(sql):执行数据库操作,参数为sql语句        close():不需要游标时进行关闭操作'''

(9)xlrd读取Excel,并写入到MySQL中

# -*- coding:UTF-8 -*-import MySQLdb as mdbimport xlrd  # 导入xlrd模块def read_excel():    workbook = xlrd.open_workbook("20142015.xls")  # 打开Excel文件读取数据    table = workbook.sheets()[0]  # 获取一个工作表,通过索引顺序获取    rows = table.nrows  # 行数    cols = table.ncols  # 列数    # print "行×列:", rows, "×", cols    row = []    for i in range(rows):  # 按行遍历        row.append(table.row_values(i))    # print row    list = []    result = []    for i in range(1, len(row)):  # 将Excel中的数据一个一个放入到list列表中        for j in range(cols):            list.append(row[i][j])        result.append(list)        list = []    # print list[1]    print result[0][0], result[0][5]    print result[1][0]    print len(result)    con = mdb.connect('localhost', 'root', 'mysql', charset='utf8')    with con:        cur = con.cursor()        cur.execute("use datatest")        cur.execute(            "create table news(id CHAR(6) ,title varchar(100), department VARCHAR(50), dates VARCHAR(30),amount VARCHAR(10) , notice VARCHAR(10))")        for i in range(len(result)):            sql = "insert into news(id, title, department, dates, amount, notice) VALUES ('%s','%s','%s','%s','%s','%s')" % (            result[i][0], result[i][1], result[i][2], result[i][3], result[i][4], result[i][5])            cur.execute(sql)if __name__ == "__main__":    read_excel()
0 0