Ubuntu14.04下Python连接数据库

2015.04.28 20:50 Tue | 166次阅读 | Python ubuntu mysql

安装

一、代码

sudo apt-get install python-setuptools
sudo apt-get install libmysqld-dev
sudo apt-get install libmysqlclient-dev
sudo apt-get install python-dev
sudo easy_install mysql-python

二、注释:

1.setuptools是 Python Enterprise Application Kit(PEAK,Python的企业应用套件)的一个副项目,它是一组Python的 distutilsde工具的增强工具。适用于 Python 2.3.5 以上的版本,64 位平台则适用于 Python 2.4 以上的版本。

2.linux发行版通常会把类库的头文件和相关的pkg-config分拆成一个单独的xxx-dev(el)包。以python为例, 以下情况是需要python-dev的

a.需要自己安装一个源外的python类库, 而这个类库内含需要编译的调用python api的c/c++文件

b.自己写的一个程序编译需要链接libpythonXX.(a|so)

其他正常使用python或者通过安装源内的python类库的不需要python-dev.

三、验证:

在python中输入命令行:

import MySQLdb

不报错即安装成功

使用

一、连接

1.代码

conn=MySQLdb.connect(host='localhost',user='root',passwd='',db='python')

2.参数

host: 连接的数据库服务器主机名,默认为本地主机(localhost)
user:数据库登陆名.默认是当前用户
passwd:数据库登陆的秘密.默认为空
db:要使用的数据库名.没有默认值
port:MySQL服务使用的TCP端口.默认是3306
charset:设置编码

conv,将文字映射到Python类型的字典。默认为MySQLdb.converters.conversions
cursorclass,cursor()使用的种类,默认值为MySQLdb.cursors.Cursor。
compress,启用协议压缩功能。
named_pipe,在windows中,与一个命名管道相连接。
init_command,一旦连接建立,就为数据库服务器指定一条语句来运行。
read_default_file,使用指定的MySQL配置文件。
read_default_group,读取的默认组。
unix_socket,在unix中,连接使用的套接字,默认使用TCP。

二、简单执行

1.代码

cursor=conn.cursor()
sql="insert into tb_user (name,age) values ('lin',20)"
cursor.execute(sql)
conn.commit()
cursor.close()
conn.close()

2.cursor

具体使用上,首先要使用连接对象(conn)获得一个指针对象(cursor),然后再使用cursor提供的方法来进行工作。

cursor方法包括两大类:

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

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

三、高级用法

1.占位符:%s

cursor=conn.cursor()
sql="insert into tb_user (name,age) values (%s,%s)"
param=('lin',25)
cursor.execute(sql,param)
conn.commit()

2.批量执行

cursor=conn.cursor()
sql="insert into tb_user (name,age) values (%s,%s)"
param=(('a',1),('b',2),('c',3),('d',4))
cursor.executemany(sql,param)
conn.commit()

3.查询

cursor=conn.cursor()
cursor.execute("select * from tb_user")
resultset=cursor.fetchall()
print resultset

resultset里保存的是查询返回的全部结果。每条结果都是一个tuple(数组)类型的数据,这些tuple组成了一个tuple

四、其他注意事项

1.编码

MySQL数据库charset=utf-8
设置Python的默认编码为 utf-8 (sys.setdefaultencoding(utf-8)
Python文件设置编码 utf-8 (文件前面加上 #encoding=utf-8)
Python连接MySQL是加上参数 charset=utf8
 #encoding=utf-8
 import sys 
 import MySQLdb 

 reload(sys) 
 sys.setdefaultencoding('utf-8') 

 conn=MySQLdb.connect(user='root',charset='utf8') 

2.指针位置

进行fetch操作(包含fetchall、fetchmany、fetchone)后,指针是会发生移动的。若不重置指针,那么再进行fetch操作,则结果集中只会包含指针后面的行内容。

手动移动指针使用

cursor.scroll(int,parm)

int:移动的行数,整数;在相对模式下,正数向下移动,负值表示向上移动;在绝对模式下,只有正数
parm:移动的模式,默认是relative,相对模式;可接受absoulte,绝对模式。

3.关闭顺序

先开启,后关闭

conn=MySQLdb.connect()
cursor=conn.cursor()
...
cursor.close()
conn.close()

4.passwd

获取连接时的参数名称