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()