全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Python操作SQLite数据库的方法详解

本文实例讲述了Python操作SQLite数据库的方法。分享给大家供大家参考,具体如下:

SQLite简单介绍

SQLite数据库是一款非常小巧的嵌入式开源数据库软件,也就是说没有独立的维护进程,所有的维护都来自于程序本身。它是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源世界著名的数据库管理系统来讲,它的处理速度比他们都快。SQLite第一个Alpha版本诞生于2000年5月. 至今已经有10个年头,SQLite也迎来了一个版本 SQLite 3已经发布。

安装与使用

1.导入Python SQLITE数据库模块

     Python2.5之后,内置了SQLite3,成为了内置模块,这给我们省了安装的功夫,只需导入即可~

import sqlite3

2. 创建/打开数据库

     在调用connect函数的时候,指定库名称,如果指定的数据库存在就直接打开这个数据库,如果不存在就新创建一个再打开。

cx = sqlite3.connect("E:/test.db")

     也可以创建数据库在内存中。

con = sqlite3.connect(":memory:")

3.数据库连接对象

    打开数据库时返回的对象cx就是一个数据库连接对象,它可以有以下操作:

① commit()--事务提交  
② rollback()--事务回滚  
③ close()--关闭一个数据库连接  
④ cursor()--创建一个游标

    关于commit(),如果isolation_level隔离级别默认,那么每次对数据库的操作,都需要使用该命令,你也可以设置isolation_level=None,这样就变为自动提交模式。

4.使用游标查询数据库

我们需要使用游标对象SQL语句查询数据库,获得查询对象。 通过以下方法来定义一个游标。

cu=cx.cursor()

游标对象有以下的操作:

① execute()--执行sql语句  
② executemany--执行多条sql语句  
③ close()--关闭游标  
④ fetchone()--从结果中取一条记录,并将游标指向下一条记录  
⑤ fetchmany()--从结果中取多条记录  
⑥ fetchall()--从结果中取出所有记录  
⑦ scroll()--游标滚动

1. 建表

复制代码 代码如下:cu.execute("create table catalog (id integer primary key,pid integer,name varchar(10) UNIQUE,nickname text NULL)")

上面语句创建了一个叫catalog的表,它有一个主键id,一个pid,和一个name,name是不可以重复的,以及一个nickname默认为NULL。

2. 插入数据

请注意避免以下写法:

# Never do this -- insecure 会导致注入攻击
pid=200
c.execute("... where pid = '%s'" % pid)

正确的做法如下,如果t只是单个数值,也要采用t=(n,)的形式,因为元组是不可变的。

for t in[(0,10,'abc','Yu'),(1,20,'cba','Xu')]:
  cx.execute("insert into catalog values (?,?,?,?)", t)

简单的插入两行数据,不过需要提醒的是,只有提交了之后,才能生效.我们使用数据库连接对象cx来进行提交commit和回滚rollback操作.

cx.commit()

3.查询

cu.execute("select * from catalog") 

要提取查询到的数据,使用游标的fetch函数,如:

In [10]: cu.fetchall()
Out[10]: [(0, 10, u'abc', u'Yu'), (1, 20, u'cba', u'Xu')]

如果我们使用cu.fetchone(),则首先返回列表中的第一项,再次使用,则返回第二项,依次下去.

4.修改

In [12]: cu.execute("update catalog set name='Boy' where id = 0")
In [13]: cx.commit()

注意,修改数据以后提交

5.删除

cu.execute("delete from catalog where id = 1") 
cx.commit() 

6.使用中文

请先确定你的IDE或者系统默认编码是utf-8,并且在中文前加上u

x=u'鱼'
cu.execute("update catalog set name=? where id = 0",x)
cu.execute("select * from catalog")
cu.fetchall()
[(0, 10, u'\u9c7c', u'Yu'), (1, 20, u'cba', u'Xu')]

如果要显示出中文字体,那需要依次打印出每个字符串

In [26]: for item in cu.fetchall():
  ....:   for element in item:
  ....:     print element,
  ....:   print
  ....: 
0 10 鱼 Yu
1 20 cba Xu

7.Row类型

Row提供了基于索引和基于名字大小写敏感的方式来访问列而几乎没有内存开销。 原文如下:

sqlite3.Row provides both index-based and case-insensitive name-based access to columns with almost no memory overhead. It will probably be better than your own custom dictionary-based approach or even a db_row based solution.

Row对象的详细介绍

class sqlite3.Row
A Row instance serves as a highly optimized row_factory for Connection objects. It tries to mimic a tuple in most of its features.
It supports mapping access by column name and index, iteration, representation, equality testing and len().
If two Row objects have exactly the same columns and their members are equal, they compare equal.
Changed in version 2.6: Added iteration and equality (hashability).
keys()
This method returns a tuple of column names. Immediately after a query, it is the first member of each tuple in Cursor.description.
New in version 2.6.

下面举例说明

In [30]: cx.row_factory = sqlite3.Row
In [31]: c = cx.cursor()
In [32]: c.execute('select * from catalog')
Out[32]: <sqlite3.Cursor object at 0x05666680>
In [33]: r = c.fetchone()
In [34]: type(r)
Out[34]: <type 'sqlite3.Row'>
In [35]: r
Out[35]: <sqlite3.Row object at 0x05348980>
In [36]: print r
(0, 10, u'\u9c7c', u'Yu')
In [37]: len(r)
Out[37]: 4
In [39]: r[2]      #使用索引查询
Out[39]: u'\u9c7c'
In [41]: r.keys()
Out[41]: ['id', 'pid', 'name', 'nickname']
In [42]: for e in r:
  ....:   print e,
  ....: 
0 10 鱼 Yu

使用列的关键词查询

In [43]: r['id']
Out[43]: 0
In [44]: r['name']
Out[44]: u'\u9c7c'

更多关于Python相关内容感兴趣的读者可查看本站专题:《Python常见数据库操作技巧汇总》、《Python编码操作技巧总结》、《Python图片操作技巧总结》、《Python数据结构与算法教程》、《Python Socket编程技巧总结》、《Python函数使用技巧总结》、《Python字符串操作技巧汇总》、《Python入门与进阶经典教程》及《Python文件与目录操作技巧汇总》

希望本文所述对大家Python程序设计有所帮助。


# Python  # 操作  # SQLite数据库  # Python3实现连接SQLite数据库的方法  # python 操作sqlite数据库的方法  # Python SQLite3数据库操作类分享  # Python读取sqlite数据库文件的方法分析  # Python开发SQLite3数据库相关操作详解【连接  # 查询  # 插入  # 更新  # 删除  # 关闭等】  # 使用Python对SQLite数据库操作  # Python操作SQLite数据库的方法详解【导入  # 创建  # 游标  # 增删改查等】  # Python版SQLite数据库从入门到综合运用案例(附详细演示)  # 关键词  # 操作技巧  # 创建一个  # 多条  # 开源  # 中取  # 的是  # 进阶  # 数据库管理系统  # 相关内容  # 第一个  # 也要  # 不可以  # 只需  # 它是  # 感兴趣  # 请先  # 数据结构  # 给大家  # 并将 


相关文章: 如何在腾讯云免费申请建站?  python的本地网站制作,如何创建本地站点?  Android滚轮选择时间控件使用详解  如何在云虚拟主机上快速搭建个人网站?  建站ABC备案流程中有哪些关键注意事项?  桂林网站制作公司有哪些,桂林马拉松怎么报名?  如何在阿里云通过域名搭建网站?  如何通过.red域名打造高辨识度品牌网站?  电商平台网站制作流程,电商网站如何制作?  浅析上传头像示例及其注意事项  香港服务器如何优化才能显著提升网站加载速度?  高防服务器租用首荐平台,企业级优惠套餐快速部署  全景视频制作网站有哪些,全景图怎么做成网页?  Swift中循环语句中的转移语句 break 和 continue  潮流网站制作头像软件下载,适合母子的网名有哪些?  已有域名如何快速搭建专属网站?  如何获取开源自助建站系统免费下载链接?  云南网站制作公司有哪些,云南最好的招聘网站是哪个?  公司网站的制作公司,企业网站制作基本流程有哪些?  建站之星安装后界面空白如何解决?  零服务器AI建站解决方案:快速部署与云端平台低成本实践  如何快速生成凡客建站的专业级图册?  建站之星2.7模板:企业网站建设与h5定制设计专题  佛山企业网站制作公司有哪些,沟通100网上服务官网?  如何规划企业建站流程的关键步骤?  网页设计网站制作软件,microsoft office哪个可以创建网页?  如何在宝塔面板创建新站点?  建站之星后台密码遗忘?如何快速找回?  创业网站制作流程,创业网站可靠吗?  建站之星后台密码遗忘如何找回?  微网站制作教程,我微信里的网站怎么才能复制到浏览器里?  红河网站制作公司,红河事业单位身份证如何上传?  php能控制zigbee模块吗_php通过串口与cc2530 zigbee通信【介绍】  宝塔新建站点报错如何解决?  建站之星代理如何获取技术支持?  建站之星手机一键生成:多端自适应+小程序开发快速建站指南  网站制作软件有哪些,制图软件有哪些?  如何在阿里云域名上完成建站全流程?  如何登录建站主机?访问步骤全解析  详解jQuery停止动画——stop()方法的使用  网站建设设计制作营销公司南阳,如何策划设计和建设网站?  哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?  制作网站的公司有哪些,做一个公司网站要多少钱?  c# F# 的 MailboxProcessor 和 C# 的 Actor 模型  相册网站制作软件,图片上的网址怎么复制?  如何快速登录WAP自助建站平台?  如何快速搭建响应式可视化网站?  极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?  香港代理服务器配置指南:高匿IP选择、跨境加速与SEO优化技巧  活动邀请函制作网站有哪些,活动邀请函文案? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。