安装引入模块
~安装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 except Exception,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 except Exception,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 except Exception,e: 24 25 print(e.message)
封装 访问数据库代码:
1 class MysqlHelper(object): 2 3 def __init__(self,host,port,db,user,passwd,charset='utf8'): 4 5 self.host=host 6 7 self.port=port 8 9 self.db=db 10 11 self.user=user 12 13 self.passwd=passwd 14 15 self.charset=charset 16 17 def open(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 def close(self): 24 25 self.cursor.close() 26 27 self.conn.close() 28 29 def cud(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 except Exception,e: 42 43 print(e.message) 44 45 46 47 def all(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 import hashlib 2 3 m = hashlib.md5() 4 5 m.update("Nobody inspects") 6 7 m.digest() 8 9 10 11 import hashlib 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操作
独立实现用户登录
实现用户注册