对于MySQL操作,Python提供了第三方模块MySQL-python,本文介绍如何应用这个模块进行最基本的MySQL操作。
一、安装
1、安装setuptools-0.6c11
#wget --no-check-certificate
#tar zxf setuptools-0.6c11.tar.gz && cd setuptools-0.6c11
#python setup.py build
#python setup.py install
2、安装MySQL-python-1.2.3
#wget
#tar zxf MySQL-python-1.2.3.tar.gz && cd MySQL-python-1.2.3
#python setup.py build
#python setup.py install
需要注意的是:如果在执行python setup.py build时,出现EnvironmentError: mysql_config not found错误,则先查找mysql_config的位置,可以使用find / -name mysql_config来查找,比如/usr/local/mysql/bin/mysql_config,然后修改MySQL-python-1.2.3目录下的site.cfg文件,去掉mysql_config=XXX这行的注释,并改成mysql_config=/usr/local/mysql/bin/mysql_config,修改完后再次执行上面最后两步的build和install命令即可。
如果上面方式不能安装,也可以从下载安装包,还可以直接yum install MySQL-python来安装。
二、应用
下面用代码介绍基本数据库操作:
#vi test_mysql.py
#-*- encoding: gb2312 -*-
import os, sys, string
import MySQLdb
# 连接数据库
try:
#conn = MySQLdb.connect(host='localhost', user='root', passwd='xxxx', db='py_test_db',charset='utf8')
#conn = MySQLdb.connect(host='localhost',user='root',passwd='xxxx',db='py_test_db')
conn = MySQLdb.connect(host='localhost',user='root',passwd='xxxx')
except Exception, e:
print e
sys.exit()
# 获取cursor对象来进行操作
cur = conn.cursor()
# 创建数据库
cur.execute('create database if not exists py_test_db')
conn.select_db('py_test_db')
# 创建表
sql = "create table if not exists test(name varchar(128) primary key, age int(4))"
cur.execute(sql)
# 插入一条记录
sql = "insert into test(name, age) values ('%s', %d)" % ("scq", 30)
try:
cur.execute(sql)
conn.commit()
except Exception, e:
print e
# 插入多条记录
# 1
sql = "insert into test(name, age) values (%s, %s)"
val = (("李四", 24), ("王五", 25), ("洪六", 26))
try:
cur.executemany(sql, val)
conn.commit()
except Exception, e:
print e
# 2
values=[]
for i in range(20):
values.append(('Tom'+str(i)), i)
try:
cur.executemany('insert into test values(%s, %s)', values)
conn.commit()
except MySQLdb.Error,e:
print "Mysql Error %d: %s" % (e.args[0], e.args[1])
# 查询记录
try:
# 1 返回一条记录
sql = "select * from test"
count = cur.execute(sql)
print 'there has %s rows record' % count
result = cur.fetchone()
print result
print 'Name: %s Age: %s' % result
# 2 返回多条记录
results=cur.fetchmany(5)
for r in results:
print r
# 3 返回所有记录
results=cur.fetchall()
for r in results:
print r[1]
except MySQLdb.Error,e:
print "Mysql Error %d: %s" % (e.args[0], e.args[1])
# 释放资源
cur.close()
conn.close()
三、接口
下面是常用的接口函数:
1、事务接口
下面接口由connect对象调用执行:
(1)commit()
提交
(2)rollback()
回滚
2、执行接口
下面接口由cursor调用执行:
(1)callproc(self, procname, args)
用来执行存储过程,接收的参数为存储过程名和参数列表,返回值为受影响的行数。
(2)execute(self, query, args)
执行单条sql语句,接收的参数为SQL语句本身和使用的参数列表,返回值为受影响的行数。
(3)executemany(self, query, args)
执行单挑SQL语句,但是重复执行参数列表里的参数,返回值为受影响的行数。
(4)nextset(self)
移动到下一个结果集。
3、接收接口
下面接口由cursor调用执行:
(1)fetchall(self)
接收全部的返回结果行。
(2)fetchmany(self, size=None)
接收size条返回结果行,如果size的值大于返回的结果行的数量,则会返回cursor.arraysize条数据。
(3)fetchone(self)
返回一条结果行。
(4)scroll(self, value, mode='relative')
移动指针到某一行,如果mode='relative',则表示从当前所在行移动value条,如果 mode='absolute',则表示从结果集的第一行移动value条。
阅读(672) | 评论(0) | 转发(0) |