详解在python操作数据库中游标的使用方法


Posted in Python onNovember 12, 2019

cursor就是一个Cursor对象,这个cursor是一个实现了迭代器(def__iter__())和生成器(yield)的MySQLdb对象,这个时候cursor中还没有数据,只有等到fetchone()或fetchall()的时候才返回一个元组tuple,才支持len()和index()操作,这也是它是迭代器的原因。但同时为什么说它是生成器呢?因为cursor只能用一次,即每用完一次之后记录其位置,等到下次再取的时候是从游标处再取而不是从头再来,而且fetch完所有的数据之后,这个cursor将不再有使用价值了,即不再能fetch到数据了。

数据库支持

使用简单的纯文本只能实现有退限的功能,所需要引入数据库,完成更强大的功能,本节使用的简单数据库SQLite 。

SQLite 和PySQLite

sqlite是非常著名的开源嵌入式数据库软件,它可以嵌入到其他程序中使用,并且提供SQL接口用来查询,非常方便。它的官方站点为http://www.sqlite.org。

而pysqlite 则是一个sqlite 为 python 提供的 api 接口,它让一切对于 sqlite 的操作都变得异常简单

在python2.5版本这后,SQLite的优势在于它的一个包装(PySQLite)已经被包括在标准库内,所以我们可以直接使用。

入门操作

可以将SQLite作为名为sqlite3的模块导入。之后就可以创建一个到数据库文件的连接----如果文件不存在就会被创建----通过提供一个文件名:

>>> import sqlite3
>>> conn= sqlite3.connect('somedatabase.db') # 创建数据库
>>>cu =conn.cursor() #能获得连接的游标
#创建数据表
>>>cu.execute("""create table catalog (
 id integer primary key,
 pid integer,
 name varchar(10) UNIQUE
 )""")
#插入两条数据
>>>cu.execute("insert into catalog values(0,0,'name1')")
>>>cu.execute("insert into catalog values(1,0,'name2')")
>>>conn.commit()
#选择(select)
>>>cu.execute("select * from catalog")
>>>cu.fetchall() 
[(0, 0, 'name1'), (1, 0, 'name2')]
>>>cu.execute("select * from catalog where id = 1")
>>>cu.fetchall()
[(1, 0, 'name2')]
#修改(update)
>>>cu.execute(“update catalog set name='name2′ where id = 0″)
>>> cx.commit()
>>> cu.execute(“select * from catalog”)
>>> cu.fetchone()
(0, 0, ‘name2′)
#删除(delete)
>>>cu.execute(“delete from catalog where id= 1″)
>>> cx.commit()
>>> cu.execute(“select * from catalog”)
>>> cu.fetchall()
[(0, 0, 'name2')]

连接

为了使用基础数据库系统,首先必须连接到它,这个时候需要使用具有名称的connect函数,该函数有多个参数,而具体用哪个参数取决于数据库。

connect函数的常用参数:

connect函数返回连接对象。这个对象表示目前和数据库的会话。连接对象支持的方法如下;

连接对象方法:

commit 方法总是可用的,但如果数据库不支持事务,它就没有任何作用。如果关闭了连接但还有未提交的事务,它们会隐式地回滚---但是只有在数据库支持持回滚的时候才可以。

rollback 方法可能不可用,因为不是所有的数据库都支持事务(事务是一系列动作)。如果可用,那么就可以“撤销”所有未提交的事务。

cursor 方法将我们引入另外一个主题:游标对象。通过游标扫行SQL 查询并检查结果。游标连接支持更多的方法,而且可能在程序中更好用。

游标:

cu = conn.cursor()

能获得连接的游标,这个游标可以用来执行SQL查询。

conn.commit()

完成插入并且做出某些更改后确保已经进行了提交,这样才可以将这些修改真正地保存到文件中。

游标对象方法:

游标对象特性:

cu.fetchone()

fetchall()返回结果集中的全部数据,结果为一个tuple的列表。每个tuple元素是按建表的字段顺序排列。注意,游标是有状态的,它可以记录当前已经取到结果的第几个记录了,因此,一般你只可以遍历结果集一次。在上面的情况下,如果执行fetchone()会返回为空。这一点在测试时需要注意。

conn.close()

可以在每次修改数据库后都进行提交,而不是仅仅在准备关闭才提交,准备关闭数据时,使用close 方法。

总结

以上所述是小编给大家介绍的在python操作数据库中游标的使用方法,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!
如果你觉得本文对你有帮助,欢迎转载,烦请注明出处,谢谢!

Python 相关文章推荐
Python采用socket模拟TCP通讯的实现方法
Nov 19 Python
Python标准库之Sys模块使用详解
May 23 Python
Java多线程编程中ThreadLocal类的用法及深入
Jun 21 Python
python逐行读写txt文件的实例讲解
Apr 03 Python
解决tensorflow测试模型时NotFoundError错误的问题
Jul 26 Python
python整小时 整天时间戳获取算法示例
Feb 20 Python
Python Selenium 之数据驱动测试的实现
Aug 01 Python
win10下python2和python3共存问题解决方法
Dec 23 Python
Python代码一键转Jar包及Java调用Python新姿势
Mar 10 Python
python中如何设置代码自动提示
Jul 15 Python
基于tensorflow __init__、build 和call的使用小结
Feb 26 Python
浅谈Python基础之列表那些事儿
May 11 Python
如何分离django中的媒体、静态文件和网页
Nov 12 #Python
pygame实现烟雨蒙蒙下彩虹雨
Nov 11 #Python
Python实现元素等待代码实例
Nov 11 #Python
如何基于python生成list的所有的子集
Nov 11 #Python
使用django和vue进行数据交互的方法步骤
Nov 11 #Python
如何使用python进行pdf文件分割
Nov 11 #Python
python实发邮件实例详解
Nov 11 #Python
You might like
ThinkPHP多语言支持与多模板支持概述
2014/08/22 PHP
php+xml实现在线英文词典之添加词条的方法
2015/01/23 PHP
php数据库的增删改查 php与javascript之间的交互
2017/08/31 PHP
php封装db类连接sqlite3数据库的方法实例
2017/12/19 PHP
在php的yii2框架中整合hbase库的方法
2018/09/20 PHP
Laravel validate error处理,ajax,json示例
2019/10/25 PHP
JQuery UI DatePicker中z-index默认为1的解决办法
2010/09/28 Javascript
js倒计时小程序
2013/11/05 Javascript
javascript实现3D切换焦点图
2015/10/16 Javascript
JS拖拽组件学习使用
2016/01/19 Javascript
AngularJS 中的Promise --- $q服务详解
2016/09/14 Javascript
javascript浏览器用户代理检测脚本实现方法
2017/10/27 Javascript
bootstrap响应式导航条模板使用详解(含下拉菜单,弹出框)
2017/11/17 Javascript
解决npm安装Electron缓慢网络超时导致失败的问题
2018/02/06 Javascript
谈谈React中的Render Props模式
2018/12/06 Javascript
详解vue beforeRouteEnter 异步获取数据给实例问题
2019/08/09 Javascript
Nodejs实现图片上传、压缩预览、定时删除功能
2019/10/25 NodeJs
Vue 中 a标签上href无法跳转的解决方式
2019/11/12 Javascript
vue element ui validate 主动触发错误提示操作
2020/09/21 Javascript
基于JQuery和DWR实现异步数据传递
2020/10/16 jQuery
vue+iview使用树形控件的具体使用
2020/11/02 Javascript
[56:12]LGD vs Optic Supermajor小组赛D组胜者组决赛 BO3 第一场 6.3
2018/06/04 DOTA
Python脚本文件打包成可执行文件的方法
2015/06/02 Python
python 2.6.6升级到python 2.7.x版本的方法
2016/10/09 Python
Python正则匹配判断手机号是否合法的方法
2020/12/09 Python
pycharm下配置pyqt5的教程(anaconda虚拟环境下+tensorflow)
2020/03/25 Python
html5 canvas移动浏览器上实现图片压缩上传
2016/03/11 HTML / CSS
应用化学专业本科生求职信
2013/09/29 职场文书
董事长岗位职责
2013/11/30 职场文书
护士自荐信范文
2013/12/15 职场文书
法学自荐信
2014/06/20 职场文书
2014年大学生职业规划书:未来不是梦,只要勇敢冲!
2014/09/22 职场文书
缓刑人员思想汇报
2014/10/11 职场文书
2014最新股权信托合同协议书
2014/11/18 职场文书
2015年度优秀员工自荐书
2015/03/06 职场文书
WebRTC记录音视频流(web技术分享)
2022/02/24 Javascript