MySQLdb 又叫 MySQL-python,是一款较为底层的,python连接mysql用的模块。MySQLdb主要聚焦于如何和数据库进行连接和进行基本的操作,操作的体现形式主要是进行SQL语句的执行。
MySQLdb是 Python 连接 MySQL 最流行的一个驱动,很多框架都也是基于此库进行开发,遗憾的是它只支持 Python2.x,而且安装的时候有很多前置条件,因为它是基于C开发的库,在 Windows 平台安装非常不友好,经常出现失败的情况,现在基本不推荐使用,取代的是它的衍生版本。
一、安装:
我是在anaconda下进行的安装
打开终端,进入anaconda中自己的环境:source activate my_env
用pip的方式安装:
pip install MySQL-python
出现以下错误:error:mysql_config not found
原因:
找不到mysql_config一般是由于通过lnmp.org或者其他方式安装mysql以后mysql_config是在/usr/local/mysql/bin/
里面,这里面的文件不是在任意位置都可以访问的
解决:
执行
ln -s /usr/local/mysql/bin/mysql_config /usr/local/bin/mysql_config
将mysql_config链接到/usr/local/bin
目录下
又发现没有权限建立软连接,这个目录归属root用户所有
mac下启用root用户:
方法一:
“系统偏好设置”--->“用户与群组”(记得把面板左下角的小锁打开)--->“登录选项”--->面板右边“网络账户服务器”--->“加入…”按钮--->“打开目录实用工具”--->弹出一个新窗口(把左下角的小锁打开)--->然后点击菜单栏上的“编辑” --->“启用 Root 用户”--->在弹窗中设置 Root密码
方法二:
在 Finder 中按组合键“shift + command + G”直接前往文件夹 /System/Library/CoreServices--->“目录实用工具”开启 Root 账户。
关闭root用户:
关闭的步骤跟上面差不多,只是在打开“目录实用工具”后,点击“编辑”菜单里的“停用 Root 用户”即可。
启用root用户后
ln -s /usr/local/mysql/bin/mysql_config /usr/local/bin/mysql_config
执行成功,pip安装
pip install MySQL-python
安装成功,此时MySQLdb就可以使用了
二、简单使用:
python使用MySQL-python链接mysql的流程
开始-->创建connect-->获取cursor(游标对象)-->cursor.excute执行命令、获取数据、处理数据-->cursor.close()关闭cursor-->
close关闭connect-->结束
示例:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
import MySQLdb
db = MySQLdb.connect(host='localhost',user='root',passwd='lq=1234',db='test',charset='utf8')
cur = db.cursor()
cur.execute("""
create table if not EXISTS test_product
(
id int(11) PRIMARY KEY ,
product_name VARCHAR(20)
)
""")
for i in range(1, 10):
cur.execute("insert into user(id,product_name) values('%d','%s')" % (int(i), 'name' + str(i)))
db.commit()
cur.close()
db.close()
cursor:通过游标对象可以实现对mysql的数据进行增删改查
cursor的各个方法:
commit():提交操作,对数据库进行增删改查操作之后需要进行提交,如没有使用commit,则数据库不会发生任何变化
rollback():回滚操作,如果数据出现异常,进行数据回滚
close():关闭,游标也有关闭方法,游标被关闭之后就不能再移动,更不能被fetch
execute(query[,args]):query是一个SQL串,args是一个序列或者映射,将依次为query中的变量赋值。这个方法返回的值是影响的行数(比如查询SQL就返回查询到了多少行,增删SQL就返回增删了多少行)
executemany(query[,args]):这个方法和execute是类似的,只不过它是重复好几次执行execute,args也是一个“相同长度序列的序列”,每一次执行都把一个序列中的项对应到query的变量中去。据说executemany在效率上比execute高出很多, 在批量插入、批量更新时可以考虑使用。需要注意的是,这个方法是一个整体,如果想要进行多次查询操作用这个方法的话往往只能得到最后一个参数约束到SQL中得到的结果集。
fetchone/fetchall():获得一行/所有行结果
fetchmany([size]):size指出了我到底要获取多少行的数据,如果能够返回的行数小于要求的行数的话,就以少的为准。
nextset():放弃所有结果集中结果直接跳到下个结果集(如果有的话)。如果没有更多结果集就返回None,否则返回True,接下来的fetch操作将会从新结果集返回数据了。所谓结果集,就是比如连着执行两条SQL语句的话,如果不调用nextset,那么fetch来fetch去总是只能得到第一个语句的结果内容,调用了这个之后就可以看到下一个语句执行结果的内容了。
rowcount:这个属性代表了上一次execute*方法得到结果的结果行数,如果是-1则代表了上一次返回结果没有结果集且行数无法确定。
参考以下文章:https://www.cnblogs.com/franknihao/p/7267182.html