python数据库编程

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 python
import MySQLdb as mdb

con = None
try:
    # 连接 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 " % data
finally:
    if con:
        # 无论如何,连接记得关闭
        con.close()

output:

Database version : 5.5.29 

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

# -*- coding: UTF-8 -*-
import MySQLdb as mdb
import 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 London
2 Honore de Balzac
3 Lion Feuchtwanger
4 Emile Zola
5 Truman Capote
6 Jack London
7 Honore de Balzac
8 Lion Feuchtwanger
9 Emile Zola
10 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 Maupasant

Number of rows updated:1
after 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 Name

1 Jack London
2 Honore de Balzac
3 Lion Feuchtwanger
4 Guy Maupasant
5 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 mdb
import 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()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值