使用Python操作MySQL的一些基本方法
前奏
为了能操作数据库,首先我们要有一个数据库,所以要首先安装Mysql,然后创建一个测试数据库python_test用以后面的测试使用
CREATEDATABASE`python_test`CHARSETUTF8
导入数据库模块
importMySQLdb
连接数据库
con=MySQLdb.connect(host="localhost",user="root",passwd="******",db="python_test",port=3306)
在这里,我们虽然拿到了python的数据库连接,但是不能在这个对象上直接对数据库进行操作,还需要获取对应的操作游标才能进行数据库的操作,所以还需要进行下面的操作
cur=con.cursor()
创建表格
cur.execute('createtablestu_info(namechar(128)notnulldefault"",agetinyint(3)notnulldefault0,sexenum("man","femal")notnulldefault"man")engine=innodbcharset=utf8') #0L
cur.execute返回执行的sql影响的行数,因为这里是创建数据库,所以是0L行
但到这里还并没有真正执行了sql语句,必须使用MySQLdb.commit才是真正执行完毕
con.commit()
到这里,我们的表格才算真正创建完成
同理,往表中写数据,也是一样的操作流程execute==>commit
不过,写入数据的execute稍有不同,如下
更新表数据
往表中写入数据时,执行execute方法,有两种方式,一种是直接execute(sql),然后commit完成,sql里是写入的sql语句
cur.execute("insertintostu_info(name,age,sex)values('Yi_Zhi_Yu',25,'man')") con.commit()
这会直接写入表中,但还有另外一种方式,
execute可以接受两个参数,第一个参数是sql语句,不过这个sql中的values的内容使用占位符%s表示,第二个参数是实际的写入的values列表,如下:
cur.execute("insertintostu_info(name,age,sex)values(%s,%s,%s)",("Tony",25,"man")) con.commit()
这种方式与第一中方式相比,更清晰一些,安全性也更好,能有效防止sql注入
另外,cursor还有一个executemany,参数和execute一样,不过第二个参数可以传递多列表值,达到多次执行某个语句的效果
cur.executemany("insertintostu_info(name,age,sex)values(%s,%s,%s)",(("LiMei",26,"femal"),("YuanYuan",28,"femal"))) con.commit()
这里实际上就是执行了两次插入操作
数据查询
直接看例子
cur.execute("select*fromstu_info") stus=cur.fetchall()
#stus已经是查询的结果结合了,格式如下:
(('Yi_Zhi_Yu',25,'man'), ('Tony',25,'man'), ('LiMei',26,'femal'), ('YuanYuan',28,'femal'))
tuple形式,我们可以通过循环输出
forstuinstus: print"name:%s;age:%d;sex:%s"%(stu[0],stu[1],stu[2])
输出:
name:Yi_Zhi_Yu;age:25;sex:man name:Tony;age:25;sex:man name:LiMei;age:26;sex:femal name:YuanYuan;age:28;sex:femal
那上面的查询虽然得到了每行的数据,但结果集中并没有字段名,如果要返回字段名,如下操作:
cur=con.cursor(cursorclass=MySQLdb.cursors.DictCursor) cur.execute("select*fromstu_info") cur.fetchall()
返回的结果集:
({'age':25,'name':'Yi_Zhi_Yu','sex':'man'}, {'age':25,'name':'Tony','sex':'man'}, {'age':26,'name':'LiMei','sex':'femal'}, {'age':28,'name':'YuanYuan','sex':'femal'})
每个元素都是一个dict,以key-value的形式展示了每个字段和对应的值
总结
Python中对数据的操作,增删改均要在指针对象执行了sql语句后,使用连接对象commit,查询的结果使用指针对象的fetch系列方法获取
PS:以上皆为学习笔记,难免有错,欢迎指正