python下使用MySQLdb操作MYSQL数据库

1、安装mysqldb(MySQLdb 是用于Python链接Mysql数据库的接口,它实现了 Python 数据库 API 规范 V2.0,基于 MySQL C API 上建立的。)
Ubuntu:sudo apt-get install python-mysqldb


2、各种操作直接上实例
#!/usr/bin/python
# -*- coding: UTF-8 -*-

#首先引入MYSQLdb库
import MySQLdb

# 打开数据库连接 参数:IP、用户名、密码、数据库名字
db = MySQLdb.connect("localhost","root","root","bank" )

# 使用cursor()方法获取操作游标 
cursor = db.cursor()

# 使用execute方法执行SQL语句
cursor.execute("SELECT VERSION()")

# 使用 fetchone() 方法获取一条数据库。
data = cursor.fetchone()

print "Database version : %s " % data

sqlcmd = 'SELECT * from teller'
cursor.execute(sqlcmd)
data = cursor.fetchone()	#获取第一行数据
print 'data:', data
data = cursor.fetchone()	#获取第二行数据
print 'data[0]:', data[0]	#获取第一个字段
print 'data[1]:', data[1]	#获取第二个字段

cursor.execute('DROP TABLE if exists table1')

#sql命令过长需要换行时,使用三引号
sqlcmd = '''CREATE TABLE table1( 
firstname char(20) not null,lastname char(20),age int)'''

cursor.execute(sqlcmd)

sqlcmd= 'show tables'
cursor.execute(sqlcmd)
data=cursor.fetchall()
print 'data:',data

sqlcmd='''insert into teller values('jack', 'jack')'''
try:	
	cursor.execute(sqlcmd)
	db.commit()		#提交到数据库执行
except Exception, e:
	db.rollback()	#发生错误时回滚
else:
	print 'execute else'	#没有错误会执行
finally:
	print 'execute finally'	#没有错误会执行

try:
	sqlcmd = 'SELECT * from teller'
	cursor.execute(sqlcmd)
	data = cursor.fetchall()	#获取结果
	for row in data:
		name=row[0]
		pwd=row[1]
		print 'name:', name, ',pwd:', pwd
except Exception, e:	
	print 'Error: unable to fecth data'

#命令中间带引号时整个语句用三引号括起来,否认会错误
sqlcmd='''update teller set teller_pass='hack' where teller_name='jack' and 1=1'''
try:	
	cursor.execute(sqlcmd)
	db.commit()		#提交到数据库执行
except Exception, e:
	db.rollback()	#发生错误时回滚

sqlcmd='''delete from teller where teller_name='jack' and 1=1'''
try:	
	cursor.execute(sqlcmd)
	db.commit()		#提交到数据库执行
except Exception, e:
	db.rollback()	#发生错误时回滚

# 关闭数据库连接
db.close()

运行结果:
zjy@ubuntu:~$ python contDb.py
Database version : 5.7.19-0ubuntu0.16.04.1
data: ('root', 'root')
data[0]: zjy
data[1]: zjy
data: (('table1',), ('teller',))
execute else
execute finally
name: root ,pwd: root
name: zjy ,pwd: zjy
name: jack ,pwd: jack
zjy@ubuntu:~$


3、和数据库建立连接
conn=MySQLdb.connect(host="localhost",user="root",passwd="sa",db="mytable",charset="utf8")
提供的connect方法用来和数据库建立连接,接收数个参数,返回连接对象.

比较常用的参数包括
host:数据库主机名.默认是用本地主机.
user:数据库登陆名.默认是当前用户.
passwd:数据库登陆的秘密.默认为空.
db:要使用的数据库名.没有默认值.
port:MySQL服务使用的TCP端口.默认是3306.
charset:数据库编码.

4、.执行sql语句和接收返回值
cursor=conn.cursor()
n=cursor.execute(sql,param)
首先,我们用使用连接对象获得一个cursor对象,接下来,我们会使用cursor提供的方法来进行工作.这些方法包括两大类:1.执行命令,2.接收返回值

cursor用来执行命令的方法:
callproc(self, procname, args):用来执行存储过程,接收的参数为存储过程名和参数列表,返回值为受影响的行数
execute(self, query, args):执行单条sql语句,接收的参数为sql语句本身和使用的参数列表,返回值为受影响的行数
executemany(self, query, args):执行单条sql语句,但是重复执行参数列表里的参数,返回值为受影响的行数
nextset(self):移动到下一个结果集

cursor用来接收返回值的方法:
fetchall(self):接收全部的返回结果行.
fetchmany(self, size=None):接收size条返回结果行.如果size的值大于返回的结果行的数量,则会返回cursor.arraysize条数据.
fetchone(self):返回一条结果行.
scroll(self, value, mode='relative'):移动指针到某一行.如果mode='relative',则表示从当前所在行移动value条,如果mode='absolute',则表示从结果集的第一行移动value条.

5、关闭数据库连接
需要分别的关闭指针对象和连接对象.他们有名字相同的方法
cursor.close()
conn.close()

6、防止乱码
需要注意的点:
1 Python文件设置编码 utf-8 (文件前面加上 #encoding=utf-8)
2 MySQL数据库charset=utf-8
3 Python连接MySQL是加上参数 charset=utf8
4 设置Python的默认编码为 utf-8 (sys.setdefaultencoding(utf-8)
#encoding=utf-8
import sys
import MySQLdb
reload(sys)
sys.setdefaultencoding('utf-8')

db=MySQLdb.connect(user='root',charset='utf8')
注:MySQL的配置文件设置也必须配置成utf8
设置 MySQL 的 my.cnf 文件,在 [client]/[mysqld]部分都设置默认的字符集(通常在/etc/mysql/my.cnf):
[client]
default-character-set = utf8
[mysqld]
default-character-set = utf8


MySQLdb用户指南: http://mysql-python.sourceforge.net/MySQLdb.html
MySQLdb文档: http://mysql-python.sourceforge.net/MySQLdb-1.2.2/public/MySQLdb-module.html
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值