首页 > 技术文章 > Python和Mysql交互

PythonInMyLife 2017-11-24 01:35 原文

安装引入模块

~安装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操作

独立实现用户登录

实现用户注册

 

推荐阅读