python下使用MySQLdb操作MYSQL数据库
1、安装mysqldb(MySQLdb 是用于Python链接Mysql数据库的接口,它实现了 Python 数据库 API 规范 V2.0,基于 MySQL C API 上建立的。)Ubuntu:sudo apt-get install python-mysqldb2、各种操作直接上实例#!/usr/bin/python# -*- coding: UTF-8 -*-
·
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:~$
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:数据库编码.
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条.
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()
需要分别的关闭指针对象和连接对象.他们有名字相同的方法
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
需要注意的点:
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
MySQLdb文档: http://mysql-python.sourceforge.net/MySQLdb-1.2.2/public/MySQLdb-module.html
更多推荐
已为社区贡献2条内容
所有评论(0)