MySQLdb是python用于连接并与mysql交互的模块,基本用法,总结如下:
1. conn = MySQLdb.connect(host = 'localhost' / '127.0.0.1', user='root', passwd=" ", db='dbname', port = 3306,...)
2. cursor = cur.cursor()# 获得游标
3. cursor.execute(sql, val) # 执行数据库操作(包括查询,插入,更新,删除等)
注意:不是最新MysqL版本,在对数据库操纵完后,需要添加"conn.commit()" 提交输入语句,否则数据库不能更新。
4. cursor.executemany(sql, val) # 同时执行多条语句
5. conn.select_db('dbname')# 选择一个数据库
6. data = cursor.fetchall(), cursor.fetchmany(), cursor.fetchone()# 执行完execute后,获取数据, data是以元组or列表类型
举例:
#coding=utf-8
'''
哈尔滨工程大学
'''
from sklearn import preprocessing
import numpy as np
# fetch data from mysql
import MySQLdb
conn = MySQLdb.connect(host='localhost', user='root', passwd='*****', port = 3306)
cursor = conn.cursor()
# 创建数据库python_test
sql = 'create database if not exists python_test'
cursor.execute(sql)
# 选择该数据库
conn.select_db('python_test')
# 创建一个数据表test
sql = 'create table if not exists test(name varchar(20), age int(4))'
cursor.execute(sql)
# 插入一条记录
sql = "insert into test(name, age) values (%s, %s)"
value = ("zhouy", 20)
try:
cursor.execute(sql, value)
print 'insert complete!'
except Exception, e:
print e
conn.commit() # 只有提交更新,才能将插入数据写入数据库中
# 同时插入多条记录
sql = "insert into test values (%s, %s)"
values = [] # 列表对象,dir()函数可以查看列表可以的操作
# 生成参数值
for i in range(10):
values.append(("Beijing" + str(i), i+10)) # 列表中每一个‘元素’(一条记录)是元组(tuple)类型
# 插入操作
try:
cursor.executemany(sql, values)
print '多条记录插入完成!'
except Exception, e:
print e
conn.commit() # 提交事务
# 查询数据
sql = 'select * from test'
cursor.execute(sql)
allData = cursor.fetchall()
# allData是一个二维列表(其中每一行是元组)
if allData:
for rec in allData:
print rec[0], rec[1]
cursor.close()
conn.close()
注: 如果需要将array或matrix类型的数据存储mysql中,需要首先将array/matrix转化为list形式,然后插入数据库中,举例:
values_array = np.array(values)
#n1 = cursor.executemany(sql, values_array) # 不会执行插入操作,提示错误(因为第二个参数是数组类型)
# 但是转化为list类型,可以写入数据库
val = []
for i in range(np.shape(values_array)[0]): # 转化为list(tuple)类型
val.append(values_array[i,:])
n2 = cursor.executemany(sql, val)
print 'n2:', n2