安装 python-mysql环境
yum下安装的版本为1.2.3可能会造成版本不匹配,手动下载安装包MySQL-python-1.2.5,
安装MySQLdb,请访问 http://sourceforge.net/projects/mysql-python ,(Linux平台可以访问:https://pypi.python.org/pypi/MySQL-python)从这里可选择适合您的平台的安装包,分为预编译的二进制文件和源代码安装包。
在解压文件夹下运行 python setup.py build
可能会提示缺少setuptools, 首先安装pypa-setuptools
继续安装可能提示
EnvironmentError: mysql_config not found解决办法
(1)ubuntu下
执行sudo apt-get install libmysqld-dev
(2)centos下
执行 sudo yum install python-devel
若出现:my_config.h:没有那个文件或目录,就执行:sudo yum install mysql-devel
注意:yum也是python写的,默认是调用/usr/bin/python的,这是系统本身自带的python,自己安装的一般在/usr/local/bin/python,所以最好别把系统自带的python给卸载掉了,自己下载的python没有yum模块。
继续编译,如果提示缺少其他工具如gcc,就继续补充
编译完成后,python setup.py install 安装成功
设置用户访问数据库权限
mysql> grant 权限1,权限2,…权限n on 数据库名称.表名称 to 用户名@用户地址 identified by ‘连接口令’;
权限1,权限2,…权限n代表select,insert,update,delete,create,drop,index,alter,grant,references,reload,shutdown,process,file等14个权限。
当权限1,权限2,…权限n被all privileges或者all代替,表示赋予用户全部权限。
当数据库名称.表名称被*.*代替,表示赋予用户操作服务器上所有数据库所有表的权限。
用户地址可以是localhost,也可以是ip地址、机器名字、域名。也可以用’%'表示从任何地址连接。
‘连接口令’不能为空,否则创建失败。
mysql>grant select,insert,update,delete,create,drop on vtdc.employee to joe@10.163.225.87 identified by ‘123′;
给来自10.163.225.87的用户joe分配可对数据库vtdc的employee表进行select,insert,update,delete,create,drop等操作的权限,并设定口令为123。
mysql>grant all privileges on vtdc.* to joe@10.163.225.87 identified by ‘123′;
给来自10.163.225.87的用户joe分配可对数据库vtdc所有表进行所有操作的权限,并设定口令为123。
mysql>grant all privileges on *.* to joe@10.163.225.87 identified by ‘123′;
给来自10.163.225.87的用户joe分配可对所有数据库的所有表进行所有操作的权限,并设定口令为123。
mysql>grant all privileges on *.* to joe@localhost identified by ‘123′;
给本机用户joe分配可对所有数据库的所有表进行所有操作的权限,并设定口令为123。
python MySQLdb的操作
1.import MySQLdb;
2.与mysql数据库建立连接:con=MySQLdb.connect(user='root',db='mysql',passwd='dingjia',host='localhost')
3.当没有游标cursor对象时候,连接对象可以使用query()方法,执行sql查询
con.query('create database test')
4.使用游标对象和execute()方法来执行sql
cur=con.cursor() 返回游标对象
cur.execute('create table users(login varchar(8),uid INT)')
cur.execute('insert into users values('hzhida',1000)')
cur.execute('select *from users')
for data in cur.fetchall(): 输出查询结果得到的数据
print '%s\t%s' % data
cur.close() 关闭游标
con.commit() 提交事务
con.close() 关闭连接
python cookbook 的例子:
#-*-coding:utf-8-*- import MySQLdb,cPickle #连接到数据库,并获得图标 connection = MySQLdb.connect(user = 'root',db='zm',passwd = '36039975',host='localhost') cursor = connection.cursor() #创建一个新表以用于试验 cursor.execute('create table test(name TEXT, ablob BLOB)') try: #准备一些BLOB用于测试 names = 'aramis', 'athos','porthos' data = { } for name in names: datum = list(name) datum.sort() data[name] = cPickle.dumps(datum,2) #execute insert sql = "insert into test values(%s, %s)" for name in names: cursor.execute(sql,(name,MySQLdb.escape_string(data[name]))) #check in the database sql = "select name, ablob from test order by name" cursor.execute(sql) for name , blob in cursor.fetchall(): print name, cPickle.loads(blob), cPickle.loads(data[name]) finally: #finish,delete table and close connection cursor.execute("drop table test") cursor.close() connection.close() 输出:
aramis ['a', 'a', 'i', 'm', 'r', 's'] ['a', 'a', 'i', 'm', 'r', 's']
athos ['a', 'h', 'o', 's', 't'] ['a', 'h', 'o', 's', 't']
porthos ['h', 'o', 'o', 'p', 'r', 's', 't'] ['h', 'o', 'o', 'p', 'r', 's', 't']
数据库查询操作
Python查询Mysql使用 fetchone() 方法获取单条数据, 使用fetchall() 方法获取多条数据。
- fetchone(): 该方法获取下一个查询结果集。结果集是一个对象
- fetchall():接收全部的返回结果行.
- rowcount: 这是一个只读属性,并返回执行execute()方法后影响的行数。
# encoding: utf-8
#!/usr/bin/python
import MySQLdb
# 打开数据库连接
db = MySQLdb.connect("localhost","testuser","test123","TESTDB" )
# 使用cursor()方法获取操作游标
cursor = db.cursor()
# SQL 查询语句
sql = "SELECT * FROM EMPLOYEE \
WHERE INCOME > '%d'" % (1000)
try:
# 执行SQL语句
cursor.execute(sql)
# 获取所有记录列表
results = cursor.fetchall()
for row in results:
fname = row[0]
lname = row[1]
age = row[2]
sex = row[3]
income = row[4]
# 打印结果
print "fname=%s,lname=%s,age=%d,sex=%s,income=%d" % \
(fname, lname, age, sex, income )
except:
print "Error: unable to fecth data"
# 关闭数据库连接
db.close()