安装引入模块
~安装mysql模块
sudo apt-get install python-mysqldb
~在文件中引入模块
import MySQLdb
Connection对象
用于建立与数据库的连接,创建对象:调用connect()方法
conn=MySQLdb.connect(参数列表)
其中参数列表有:
host: 连接的mysql主机,如果本机是'localhost';
port: 连接的mysql主机的端口,默认是3306;
db: 数据库的名称;
user: 连接的用户名;
passwd: 连接的密码;
charset: 通信采用的编码方式,推荐使用utf8
对象的方法
close() 关闭连接
commit()事务,所以需要提交才会生效;
rollback()事务,放弃之前的操作;
cursor()返回Cursor对象,用于执行sql语句并获得结果;
Cursor对象
执行sql语句
创建对象:调用Connection对象的cursor()方法
cursor1 = conn.cursor();
对象方法:
close() 关闭
execute(operation [,parameters])执行语句,返回受影响的行数
fetchone()执行查询语句,获取查询结果集的第一行数据,返回一个元祖
next() 执行查询语句时,获取当前行的下一行
fetchall() 执行查询,获取结果集中的所有行,一行组成一个元祖,再将所有的元祖组装成功一个元祖返回
scroll(value [, mode]) 将行指针移动到某个位置
mode 表示移动的方式
mode 的默认值为relative,表示基于当前行移动到value,value为正则向下移动,value为负则向上已动工
mode的值为absolute,表示基于第一条数据的位置,第一条数据的位置为0
对象的属性
rowcount只读属性,表示最近一次execute()执行后受影响的行数
connection获得当前连接对象
案例:
插入
1 #coding=utf-8
2
3 from MySQLdb import *
4
5 try:6 conn=connect(host='localhost',port=3306,user='root',passwd='mysql',db='python3',charset='utf8')7
8 cursor1 =conn.cursor()9
10 sql = 'insert into student(name) values('liu')'
11
12 cursor1.execute(sql)13
14 conn.commit()15
16 cursor1.close()17
18 conn.close()19
20 exceptException,e:21
22 print(e.message)
参数化:
目的就是为了防止SQL注入
1 #encoding=utf-8
2
3 from MySQLdb import *
4
5 try:6
7 conn = connect(host='localhost',port=3306,user='root',passwd='mysql',db='python3',charset='utf8')8
9 cur =conn.cursor()10
11 sname = 'xxxx'
12
13 params =[sname]14
15 count = cur.execute('insert into students(sname) values(%s)',params)16
17 print(count)18
19 conn.commit()20
21 cur.close()22
23 conn.close()24
25 exceptException,e:26
27 print(e.message)
其他语句 Cursor对象的execute()方法,也可以用于执行create table等语句;
建议在开发之初就创建好数据库,不要在这里执行创建工作。
查询 查询一行数据使用Cursor对象的fetchone,查询所有数据使用fetchall()
1 #encoding=utf-8
2
3 from MySQLdb import *
4
5 try:6
7 conn =connect()8
9 sql = "select * from admin where id = %s"
10
11 cur =conn.cursor()12
13 cur.execute(sql,[5])14
15 res =cur.fetchone()16
17 print(res) 一个元祖18
19 cur.close()20
21 conn.close()22
23 exceptException,e:24
25 print(e.message)
封装 访问数据库代码:
1 classMysqlHelper(object):2
3 def __init__(self,host,port,db,user,passwd,charset='utf8'):4
5 self.host=host6
7 self.port=port8
9 self.db=db10
11 self.user=user12
13 self.passwd=passwd14
15 self.charset=charset16
17 defopen(self):18
19 self.conn=connect(host=self.host,port=self.port,db=self.db,user=self.user,passwd=self.passwd,charset=self.charset)20
21 self.cursor=self.conn.cursor()22
23 defclose(self):24
25 self.cursor.close()26
27 self.conn.close()28
29 defcud(self,sql,params):30
31 try:32
33 self.open()34
35 self.cursor.execute(sql,params)36
37 self.conn.commit()38
39 self.close()40
41 exceptException,e:42
43 print(e.message)44
45
46
47 defall(self,sql,params):48
49 try:50
51 self.open()52
53 self.cursor.execute(sql,params)54
55 result=self.cursor.fetchall()56
57 self.close()58
59 return result
登录案例:
密码加密:
1 importhashlib2
3 m =hashlib.md5()4
5 m.update("Nobody inspects")6
7 m.digest()8
9
10
11 importhashlib
13 s1=sha1()14
15 s1.update(pwd)16
17 pwd2=s1.hexdigest()
总结python与mysql交互
Connection 对象 尽量晚打开,尽量早关闭
connect(host,port,db,user,passwd,charset)
cursor()
close()
Cursor
execute() 如果执行insert update delete 语句时,需要commit()
commit()
fetchall() 返回二维元祖
fetchone() 返回一维元祖
close()
需要完成的内容:
封装数据库操作工具类
实现工具类完成crud操作
独立实现用户登录
实现用户注册