Python中的mysql操作可以使用MySQLdb模块来完成。它符合Python社区设计的Python Database API SpecificationV2.0标准,所以与其他的数据库操作的API,如SQLite等基本类似。
学习可参见:http://www.runoob.com/python3/python3-mysql.html
 
1.连接的建立与释放
建立连接时可用connect函数,它返回一个Connection类型对象
 
conn = MySQLdb.connect('localhost', 'root', '123456', 'test')
 
connect方法常用的参数有
 
host:数据库主机名.默认是用本地主机. 
user:数据库登陆名.默认是当前用户. 
passwd:数据库登陆的秘密.默认为空. 
db:要使用的数据库名.没有默认值. 
port:MySQL服务使用的TCP端口.默认是3306.
charset:数据库编码。
 
如果在数据编码设置正确时,向数据库插入数据出现乱码时,可以设置连接的字符集参数charset。
 
释放连接时可以应用Connection类型对象的close方法。
conn.close()
 
2.Cursor对象
执行SQL语句前要获得一个指定连接的Cursor对象,由Cursor对象执行SQL查询并获取结果。
 
获得Cursor对象的方法
cur = conn.cursor()
 
在默认情况下cursor方法返回的是BaseCursor类型对象,BaseCursor类型对象在执行查询后每条记录的结果以列表(list)表示。如果要返回字典(dict)表示的记录,就要设置cursorclass参数为MySQLdb.cursors.DictCursor类。
cur = conn.cursor(cursorclass=MySQLdb.cursors.DictCursor)
这个参数也可在调用connect方法建立连接时设置
conn  =  MySQLdb.connect(host  =  'localhost',  user  =  'root',  passwd  =  '123456',  db  =  'test'  cursorclass  =  MySQLdb.cursors.DictCursor)
 
执行结束后可以关闭cursor对象
cur.close()
 
3.查询,插入,更新、删除操作。
 
Cursor类型提供了execute方法用于执行SQL操作
execute(query [,parameters])
query是一个SQL字符串,parameters是一个序列或映射,返回值是所影响的记录数
 
查询
cur.execute("select * from t1 where name = %s and age = %s", ('June', 27))
cur.execute("select * from t1 where name = %(name)s and age = %(age)s", {'name':'June', 'age':27})
这里和字符串的格式化操作类似,但不管参数是什么类型,都要用'%s'
 
获取结果
获取结果集有三种方法,fetchone、fetchall和fetchmany,返回结果是一个tuple对象,tuple中的每一个元素对应查询结果中的一条记录。
fetchone()返回结果集中的下一条记录
fetchall()返回结果集中的剩余记录
fetchmany([size])返回结果集中size条记录
 
插入、更新、删除
cur.execute("insert t1(name, age) values(%s, %s)", ('Jack', 32))
更新和删除的操作与更新、删除类似
 
除了execute,Cursor类还提供了executemany()方法
executemany(query [, parametersequence])
querey是一个查询字符串,parametersequence是一个参数序列。这一序列的每一项都是一个序列或映射对象。但executemany只适合插入、更新或删除操作,而不适用于查询操作。
 
cur.execute("insert t1(name, age) values(%s, %s)", (('Jack', 32), ('Junior', 24)))
 
mysql现在一般会默认InnoDB作为默认引擎,InnoDB引擎执行插入、更新、删除操作后要进行提交,才会更新数据库。
cur.commit()
 
4.其他操作
Connection类:
rollback() 回滚
 
Cursor类:
callproc(procname, args):用来执行存储过程,接收的参数为存储过程名和参数列表,返回值为受影响的行数。
nextset():移动到下一个结果集
执行查询操作或存储过程时可能返回多个结果集,例如:
cur.execute('select * from t1; select * from t2')

python_MySQL 数据库操作的更多相关文章

  1. 如何在高并发环境下设计出无锁的数据库操作(Java版本)

    一个在线2k的游戏,每秒钟并发都吓死人.传统的hibernate直接插库基本上是不可行的.我就一步步推导出一个无锁的数据库操作. 1. 并发中如何无锁. 一个很简单的思路,把并发转化成为单线程.Jav ...

  2. 【知识必备】ezSQL,最好用的数据库操作类,让php操作sql更简单~

    最近用php做了点小东东,用上了ezSQL,感觉真的很ez,所以拿来跟大家分享一下~ ezSQL是一个非常好用的PHP数据库操作类.著名的开源博客WordPress的数据库操作就使用了ezSQL的My ...

  3. MySQL 系列(二) 你不知道的数据库操作

    第一篇:MySQL 系列(一) 生产标准线上环境安装配置案例及棘手问题解决 第二篇:MySQL 系列(二) 你不知道的数据库操作 本章内容: 查看\创建\使用\删除 数据库 用户管理及授权实战 局域网 ...

  4. ABP创建数据库操作步骤

    1 ABP创建数据库操作步骤 1.1 SimpleTaskSystem.Web项目中的Web.config文件修改数据库配置. <add name="Default" pro ...

  5. 【第一篇】ASP.NET MVC快速入门之数据库操作(MVC5+EF6)

    目录 [第一篇]ASP.NET MVC快速入门之数据库操作(MVC5+EF6) [第二篇]ASP.NET MVC快速入门之数据注解(MVC5+EF6) [第三篇]ASP.NET MVC快速入门之安全策 ...

  6. django数据库操作和中间件

    数据库配置 django的数据库相关表配置在models.py文件中,数据库的连接相关信息配置在settings.py中 models.py相关相关参数配置 from django.db import ...

  7. [Android Pro] 完美Android Cursor使用例子(Android数据库操作)

    reference to : http://www.ablanxue.com/prone_10575_1.html 完美 Android Cursor使用例子(Android数据库操作),Androi ...

  8. phpcms v9 中的数据库操作函数

    1.查询 $this->select($where = '', $data = '*', $limit = '', $order = '', $group = '', $key='')   返回 ...

  9. Android打造属于自己的数据库操作类。

    1.概述 开发Android的同学都知道sdk已经为我们提供了一个SQLiteOpenHelper类来创建和管理SQLite数据库,通过写一个子类去继承它,就可以方便的创建.管理数据库.但是当我们需要 ...

随机推荐

  1. 《关于安卓和IOS开发》

    28年前有人发明www microsoft技术开发人员lot 看论文可以看中国知网 微软亚洲研究院 WWDC苹果开发者大会上,苹果都会发布一些新的公司发展出的新的产品的新技术.iOS开发,用到的语言有 ...

  2. 【Linux】进程管理

    进程是什么? 程序 保存在硬盘.光盘等介质中的可执行代码和数据 是静态保存的代码 进程 在CPU及内存中运行的动态执行的程序代码 进程是程序运行的实例 同一个程序可能对应多个进程     子进程和父进 ...

  3. 转 Linux会话浅析(写得极好,表述清楚语言不硬)

    说起会话,我们经常登录到linux系统,执行各种各样的程序,这都牵涉到会话.但是,一般情况下我们又很少会去关注到会话的存在,很少会去了解它的来龙去脉.本文就对linux会话相关的信息做一些整理,看看隐 ...

  4. 搭建php服务器网站

    一.Apache安装 yum install httpd启动systemctl start httpd.service #启动systemctl stop httpd.service #停止syste ...

  5. Msql浅析-基础命令(二)

    篇幅简介 一.Msql数据类型 1.整型 tinyint,  占 1字节 ,有符号: -128~127,无符号位 :0~255 smallint, 占 2字节 ,有符号: -32768~32767无符 ...

  6. docker swarm实现java项目的发布/滚动更新/回滚/镜像管理

    使用docker swarm滚动更新java项目,部署集群,这一切的前提是使用Jenkins+maven进行项目打包,分发等功能 具体可以参考我的另外三篇文章 https://www.cnblogs. ...

  7. day1-exercise

    """ Day1 作业 Isabelle/刘佳赐 October 22, 2018 """ """ 1. 变量 ...

  8. LIFO栈 ADT接口 实现十进制转其他进制

    LIFO 接口 Stack.h //LIFO 链栈初始化 void InitStack(Stack top){ //LIFO 链栈判断栈空 boolean StackKEmpty(Stack top) ...

  9. OpenFlow1.3.3 学习记录(持续更新)

    OpenFlow1.3.3 学习记录(持续更新) 正在学习OpenFlow1.3,该篇笔记将日常更新,主要内容大致为官方文档的总结与翻译. 交换机组件 按照优先级顺序进行包匹配,如果匹配到流表项,则执 ...

  10. 关于Oracle分区表的理解

    Oracle分区表首要目的是用于管理数据文件,对数据文件进行划分和管理.但常常会听到通过分区表来提高性能的说法,实际上,分区表结合索引,加上有效的SQL语句,确实可以提高性能.什么是有效的SQL呢,就 ...