就像Java连MySQL需要加载jdbc驱动一样,python的标准数据接口Python DB-API为开发人员提供了数据库应用编程接口,可以支持很多种数据库,今天我们以mysql为例来介绍python如何操作数据库。
你可以访问 Python数据库接口及API查看详细的支持数据库列表。
不同的数据库需要下载不同的DB API模块,例如你需要访问Oracle数据库和Mysql数据,你需要下载Oracle和MySQL数据库模块。
DB-API 是一个规范. 它定义了一系列必须的对象和数据库存取方式, 以便为各种各样的底层数据库系统和多种多样的数据库接口程序提供一致的访问接口 。
MySQLdb
MySQLdb 是用于Python链接Mysql数据库的接口,它实现了 Python 数据库 API 规范 V2.0,基于 MySQL C API 上建立的。
安装MySQLdb
为了用DB-API编写MySQL脚本,必须确保已经安装了MySQLdb。复制以下代码,并执行:
import MySQLdb
如果执行后的输出结果如下所示,意味着你没有安装 MySQLdb 模块:
Traceback (most recent call last):
File "test.py", line 3, in <module>
import MySQLdb
ImportError: No module named MySQLdb
MySQLdb可以从下面的网址下载安装包,
如果想下载Windows版可以去这个网站 http://sourceforge.net/projects/mysql-python ,安装过程按照安装提示即可完成。
如果想下载的是Linux的安装包可以去这个网站,https://pypi.org/project/MySQL-python/
下载好以后开始在Linux系统下解压:
gunzip MySQL-python-1.2.2.tar.gz
tar -zxf MySQL-python-1.2.2.tar
cd MySQL-python-1.2.2
python setup.py build
python setup.py install
pymysql
python3以后是不支持MySQLdb了,但是可以使用pymysql包,可以直接通过pymysql进行连接。直接在cmd窗口输入命令安装就好了。
pip install pymysql
mysqldb 与 pymsql在用法上几乎相同,只是前者支持python2,后者支持python3,所以根据自己的版本使用就行了。
连接mysql数据库流程图
Connection()
参数解析:
- host:数据库主机名.默认是用本地主机
- port:MySQL服务使用的TCP端口.默认是3306,数字类型
- user:数据库登陆名.默认是当前用户
- password:数据库登陆的秘密.默认为空
- db:要使用的数据库名.没有默认值
- charset:数据库编码
cursor()
cursor就是一个Cursor对象,这个cursor是一个实现了迭代器(def__iter__())和生成器(yield)的MySQLdb对象,这个时候cursor中还没有数据,只有等到fetchone()或fetchall()的时候才返回一个元组tuple,才支持len()和index()操作,这也是它是迭代器的原因。
但同时为什么说它是生成器呢?因为cursor只能用一次,即每用完一次之后记录其位置,等到下次再取的时候是从游标处再取而不是从头再来,而且fetch完所有的数据之后,这个cursor将不再有使用价值了,即不再能fetch到数据了。
常用方法解析:
- close():关闭此游标对象
- fetchone():得到结果集的下一行
- fetchmany(size):得到结果集的下几行
- fetchall():得到结果集中剩下的所有行
- excute(sql[, args]):执行一个数据库查询或命令
- excutemany(sql, args):执行多个数据库查询或命令
数据库连接前准备
- 已经创建了MySQL数据库 testdb
- 创建了表 employee
- EMPLOYEE表字段为 FIRST_NAME, LAST_NAME, AGE, SEX 和 INCOME
- 连接数据库TESTDB使用的用户名为 “root” ,密码为 “123”
- 虚拟机上已经安装了 Python MySQLdb 模块。
使用pycharm操作:
连接Mysql数据库
import MySQLdb
#或者
import pymysql
#打开数据库连接
db = MySQLdb.Connect("localhost",3306,"root", "123", "testdb", charset='utf8' )
#或者
db = pymysql.Connect("localhost",3306, "root", "123", "testdb", charset='utf8' )
#使用