Python教程之数据库编程

本章节讲解Python操作数据库,完成简单的增删改查工作,以MySQL数据库为例。

Python的MySQL数据库操作模块叫MySQLdb,需要额外的安装下。

通过pip工具安装:pip install MySQLdb

MySQLdb模块,我们主要就用到连接数据库的方法MySQLdb.Connect(),连接上数据库后,再使用一些方法做相应的操作。

MySQLdb.Connect(parameters...)方法提供了以下一些常用的参数:

参数

描述

host

数据库地址

user

数据库用户名,

passwd

数据库密码,默认为空

db

数据库库名,没有默认库

port

数据库端口,默认3306

connect_timeout

连接超时时间,秒为单位

use_unicode

结果以unicode字符串返回

charset

插入数据库编码

连接对象返回的connect()函数:

commit()

提交事务。对支持事务的数据库和表,如果提交修改操作,不适用这个方法,则不会写到数据库中

rollback()

事务回滚。对支持事务的数据库和表,如果执行此方法,则回滚当前事务。在没有commit()前提下。

cursor([cursorclass])

创建一个游标对象。所有的sql语句的执行都要在游标对象下进行。MySQL本身不支持游标,MySQLdb模块对其游标进行了仿真。

游标对象也提供了几种方法:

close()

关闭游标

execute(sql)

执行sql语句

excutemany(sql)

执行多条sql语句

fetchone()

从执行结果中取第一条记录

fetchmany(n)

从执行结果中取n条记录

fetchall()

从执行结果中取所有记录

scroll(self, value, mode=relative)

游标滚动

博客地址:http://lizhenliang.blog.51cto.com and https://yq.aliyun.com/u/lizhenliang

13.1 数据库增删改查

13.1.1 在test库创建一张user表,并添加一条记录

>>> conn = MySQLdb.Connect(host=192.168.1.244,user=root,passwd=QHyCTajI,db=test,charset=utf8)

>>> cursor = conn.cursor()

>>> sql = "create table user(id int,name varchar(30),password varchar(30))"

>>> cursor.execute(sql)   # 返回的数字是影响的行数

0L    

>>> sql = "insert into user(id,name,password) values(1,xiaoming,123456)"

>>> cursor.execute(sql)

1L

>>> conn.commit()  # 提交事务,写入到数据库

>>> cursor.execute(show tables)  # 查看创建的表

1L

>>> cursor.fetchall()  # 返回上一个游标执行的所有结果,默认是以元组形式返回

((uuser,),)

>>> cursor.execute(select * from user)           

1L

>>> cursor.fetchall()

((1L, uxiaoming, u123456),)

13.1.2 插入多条数据

>>> sql = insert into user(id,name,password) values(%s,%s,%s)

>>> args = [(2,zhangsan,123456), (3,lisi,123456),(4,wangwu,123456)] 

>>> cursor.executemany(sql, args)

3L

>>> conn.commit()

>>> sql = select * from user

>>> cursor.execute(sql)

4L

>>> cursor.fetchall()

((1L, uxiaoming, u123456), (2L, uzhangsan, u123456), (3L, ulisi, u123456), (4L, uwangwu, u123456))

args变量是一个包含多元组的列表,每个元组对应着每条记录。当查询多条记录时,使用此方法,可有效提高插入效率。

13.1.3 删除用户名xiaoming的记录

>>> sql = delete from user where name="xiaoming"

>>> cursor.execute(sql)                           

1L

>>> conn.commit()

>>> sql = select * from user                   

>>> cursor.execute(sql)       

3L

>>> cursor.fetchall()         

((2L, uzhangsan, u123456), (3L, ulisi, u123456), (4L, uwangwu, u123456))

13.1.4 查询记录

>>> sql = select * from user 

>>> cursor.execute(sql)         

3L

>>> cursor.fetchone()   # 获取第一条记录

(2L, uzhangsan, u123456)

>>> sql = select * from user 

>>> cursor.execute(sql)         

3L

>>> cursor.fetchmany(2) # 获取两条记录

((2L, uzhangsan, u123456), (3L, ulisi, u123456))

13.1.4 以字典形式返回结果

默认显示是元组形式,要想返回字典形式,使得更易处理,就用到cursor([cursorclass])中的cusorclass参数。

传入 MySQLdb.cursors.DictCursor类:

>>> cursor = conn.cursor(MySQLdb.cursors.DictCursor)

>>> sql = select * from user

>>> cursor.execute(sql)

3L

>>> cursor.fetchall()

({password: u123456, id: 2L, name: uzhangsan}, {password: u123456, id: 3L, name: ulisi}, {password: u123456, id: 4L, name: uwangwu})

13.2 遍历查询结果

#!/usr/bin/env python

# -*- coding: utf-8 -*-

import MySQLdb

try:

conn = MySQLdb.Connect(host=127.0.0.1, port=3306, user=root, passwd=123456, connect_timeout=3, charset=utf8)

cursor = conn.cursor()

sql = "select * from user"

cursor.execute(sql)

for i in cursor.fetchall():

print i

except Exception, e:

print ("Connection Error: " + str(e))

finally:

conn.close()

# python test.py

(2L, uzhangsan, u123456)

(3L, ulisi, u123456)

(4L, uwangwu, u123456)

使用for循环遍历查询结果,并增加了异常处理。

  • 版权声明: 本文源自互联网, 于2个月前,由整理发表,共 3025字。
  • 原文链接:点此查看原文