Python中sqlite学习教程

Python SQLITE数据库是一款非常小巧的嵌入式开源数据库软件,没有独立的维护进程,所有的维护都来自于程序本身。它使用一个文件存储整个数据库,操作十分方便。

以下是重要的 sqlite3 模块程序,可以满足您在 Python 程序中使用 SQLite 数据库的需求。如果您需要了解更多细节,请查看 Python sqlite3 模块的官方文档。

序号 API & 描述
1 sqlite3.connect(database [,timeout ,other optional arguments])

该 API 打开一个到 SQLite 数据库文件 database 的链接。您可以使用 ":memory:" 来在 RAM 中打开一个到 database 的数据库连接,而不是在磁盘上打开。如果数据库成功打开,则返回一个连接对象。

当一个数据库被多个连接访问,且其中一个修改了数据库,此时 SQLite 数据库被锁定,直到事务提交。timeout 参数表示连接等待锁定的持续时间,直到发生异常断开连接。timeout 参数默认是 5.0(5 秒)。

如果给定的数据库名称 filename 不存在,则该调用将创建一个数据库。如果您不想在当前目录中创建数据库,那么您可以指定带有路径的文件名,这样您就能在任意地方创建数据库。

2 connection.cursor([cursorClass])

该例程创建一个 cursor,将在 Python 数据库编程中用到。该方法接受一个单一的可选的参数 cursorClass。如果提供了该参数,则它必须是一个扩展自 sqlite3.Cursor 的自定义的 cursor 类。

3 cursor.execute(sql [, optional parameters])

该例程执行一个 SQL 语句。该 SQL 语句可以被参数化(即使用占位符代替 SQL 文本)。sqlite3 模块支持两种类型的占位符:问好和命名占位符(命名样式)。

例如:cursor.execute("insert into people values (?, ?)", (who, age))

4 connection.execute(sql [, optional parameters])

该例程是上面执行的由光标(cursor)对象提供的方法的快捷方式,它通过调用光标(cursor)方法创建了一个中间的光标对象,然后通过给定的参数调用光标的 execute 方法。

5 cursor.executemany(sql, seq_of_parameters)

该例程对 seq_of_parameters 中的所有参数或映射执行一个 SQL 命令。

6 connection.executemany(sql[, parameters])

该例程是一个由调用光标(cursor)方法创建的中间的光标对象的快捷方式,然后通过给定的参数调用光标的 executemany 方法。

7 cursor.executescript(sql_script)

该例程一旦接收到脚本,会执行多个 SQL 语句。它首先执行 COMMIT 语句,然后执行作为参数传入的 SQL 脚本。所有的 SQL 语句应该用分号(;)分隔。

8 connection.executescript(sql_script)

该例程是一个由调用光标(cursor)方法创建的中间的光标对象的快捷方式,然后通过给定的参数调用光标的 executescript 方法。

9 connection.total_changes()

该例程返回自数据库连接打开以来被修改、插入或删除的数据库总行数。

10 connection.commit()

该方法提交当前的食物。如果您未调用该方法,那么自您上一次调用 commit() 以来所做的任何动作对其他数据库连接来说是不可见的。

11 connection.rollback()

该方法回滚自上一次调用 commit() 以来对数据库所做的更改。

12 connection.close()

该方法关闭数据库连接。请注意,这不会自动调用 commit()。如果您之前未调用 commit() 方法,就直接关闭数据库连接,您所做的所有更改将全部丢失!

13 cursor.fetchone()

该方法获取查询结果集中的下一行,返回一个单一的序列,当没有更多可用的数据时,则返回 None。

14 cursor.fetchmany([size=cursor.arraysize])

该方法获取查询结果集中的下一行组,返回一个列表。当没有更多的可用的行时,则返回一个空的列表。该方法尝试获取由 size 参数指定的尽可能多的行。

15 cursor.fetchall()

该例程获取查询结果集中所有(剩余)的行,返回一个列表。当没有可用的行时,则返回一个空的列表。

Python 的数据库模块有统一的接口标准,所以数据库操作都有统一的模式,基本上都是下面几步(假设数据库模块名为db):

  1)用db.connect创建数据库连接,假设连接对象为conn

2)如果该数据库操作不需要返回结果,就直接用conn.execute查询,根据数据库事务隔离级别的不同,可能修改数据库需要conn.commit

3)如果需要返回查询结果则用conn.cursor创建游标对象cur, 通过cur.execute查询数据库,用cur.fetchall/cur.fetchone/cur.fetchmany返回查询结果。根据数据库事 务隔离级别的不同,可能修改数据库需要conn.commit

  4)关闭cur, conn

下面我们以上面的介绍的步骤来介绍sqlite的使用。

1)导入sqlite3模块,如:

>>> import sqlite3

2)创建数据库/打开数据库

创建或打开数据,如下:

>>> import sqlite3 as sqlite
>>> conn = sqlite.connect("D:/test.db")

上面的命令打开D:/test.db的数据库文件,如果指定的数据库存在就直接打开这个数据库,如果不存在就新创建一个再打开,并返回数据库连接对象conn,该对象主要有以下操作:

  • commit(): 事务提交
  • rollback(): 事务回滚
  • close(): 关闭一个数据库连接
  • cursor(): 创建一个游标

connect的完整形式如:

connect(database[, timeout, isolation_level, detect_types, factory])

其中,commit()方法用于提交事务,rollback()方法用于回滚至上次调用commit()方法的地方。可以通过Connection.isolation_level定义事务隔离级别,当该属性设置成None时,它会自动提交事务,不需要显式地调用commit()方法。

除了直接指定数据库文件之外,还有一种方法是在内存中创建数据库。方法是将":memory:"作为参数传递给sqlite.connect()函数:

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

如果不需要返回结果,则可以直接使用conn.execute( )进行数据操作,如下,创建一个数据库表user:

conn.execute("create table user(uid int primary key not null, name text not null, password text not null, age int)")

如果需要返回结果,则继续看下面的游标对象。

3)创建游标对象

>>> cur = conn.cursor()

游标对象有以下的操作:

  • execute()--执行sql语句
  • executemany--执行多条sql语句
  • close()--关闭游标
  • fetchone()--从结果中取一条记录,并将游标指向下一条记录
  • fetchmany()--从结果中取多条记录
  • fetchall()--从结果中取出所有记录

如进行插入操作:

>>> cur.execute("insert into user(uid,name, password,age)values(1,'John','123',12)")
<sqlite3.Cursor object at 0x02A8A0A0>
>>> cur.execute("insert into user(uid,name, password,age)values(2,'Kate','123',12)")

现在查询看下刚才插入的数据:

>>> cur.execute("select* from user")
<sqlite3.Cursor object at 0x02A8A0A0>
>>> print(cur.fetchone())
(1, u'John', u'123', 12)
>>> print(cur.fetchall())
[(2, u'Kate', u'123', 12)]
>>> print(cur.fetchall())
[]
>>> cur.execute("select* from user")
<sqlite3.Cursor object at 0x02A8A0A0>
>>> print(cur.fetchall())
[(1, u'John', u'123', 12), (2, u'Kate', u'123', 12)]
>>> 

从上面的代码可以看到,采用fetchone( )每次取出一条数据,并且指向下一个数据,而fetchall( )取出所有的数据,并指向末尾。当然,还有修改操作:

>>> cur.execute("update user set age =15 where uid =1")
<sqlite3.Cursor object at 0x02A8A0A0>
>>> cur.execute("select* from user where uid =1")
<sqlite3.Cursor object at 0x02A8A0A0>
>>> print(cur.fetchall())
[(1, u'John', u'123', 15)]
>>> 

删除操作:

>>> cur.execute("delete from user where uid =1")
<sqlite3.Cursor object at 0x02A8A0A0>
>>> 

除了上面显示的cur=conn.curson()创建右边对象对象外,其实可以直接conn.ececute( )返回的游标对象,如:

>>> cur = conn.execute("select* from user")
>>> print(cur.fetchall())
[(1, u'test', u'124', 16)]
>>> 

游标对象取多多条记录fetchmany( ):

>>> cur = conn.execute("select* from user")
>>> print(cur.fetchmany(3))
[(1, u'test', u'124', 16), (2, u'test2', u'124', 18), (3, u'test3', u'124', 20)]
>>> 

下面,我们将Python中的sqlite操作封装成一个类,如下:

class sqlitehelper:
    def __init__(self, db):
        self.db = db
        try:
            self.conn = sqlite.connect(db)
            self.cur = self.conn.cursor()
        except sqlite.Error,e:
            print("connect "+db+" failed:"+e.reason)
            return
    def __del__(self):
        self.conn.close()

    def execute(self,sql):
        self.cur.execute(sql)
        return self.cur

    def select(self, sql):
        self.cur.execute(sql)
        return self.cur

    def insert(self, sql):
        self.cur.execute(sql)
        return self.cur

    def delete(self, sql):
        self.cur.execute(sql)
        return self.cur

    def update(self, sql):
        self.cur.execute(sql)
        return self.cur

参考资料:

1、python之sqlite3使用详解

2、sqlite3 — DB-API 2.0 interface for SQLite databases

3、Python sqlite3 模块 API

时间: 2024-10-05 05:01:57

Python中sqlite学习教程的相关文章

Python中subprocess学习

生命不息奋斗不止! subprocess的目的就是启动一个新的进程并且与之通信. subprocess模块中只定义了一个类: Popen.可以使用Popen来创建进程,并与进程进行复杂的交互.它的构造函数如下: subprocess.Popen(args, bufsize=0, executable=None, stdin=None, stdout=None, stderr=None, preexec_fn=None, close_fds=False, shell=False, cwd=None

【转载】Python中的正则表达式教程

本文http://www.cnblogs.com/huxi/archive/2010/07/04/1771073.html 正则表达式经常被用到,而自己总是记不全,转载一份完整的以备不时之需. 1. 正则表达式基础 1.1. 简单介绍 正则表达式并不是Python的一部分.正则表达式是用于处理字符串的强大工具,拥有自己独特的语法以及一个独立的处理引擎,效率上可能不如str自带的方法,但功能十分强大.得益于这一点,在提供了正则表达式的语言里,正则表达式的语法都是一样的,区别只在于不同的编程语言实现

python中numpy学习

NumPy的主要对象是同种元素的多维数组.这是一个所有的元素都是一种类型.通过一个正整数元组索引的元素表格(通常是元素是数字).在NumPy中维度(dimensions)叫做轴(axes),轴的个数叫做秩(rank). 例如,在3D空间一个点的坐标 [1, 2, 3] 是一个秩为1的数组,因为它只有一个轴.那个轴长度为3.又例如,在以下例子中,数组的秩为2(它有两个维度).第一个维度长度为2,第二个维度长度为3. [[ 1., 0., 0.], [ 0., 1., 2.]] NumPy的数组类被

python中scipy学习——随机稀疏矩阵及操作

1.生成随机稀疏矩阵: scipy中生成随机稀疏矩阵的函数如下: scipy.sparse.rand(m,n,density,format,dtype,random_state) 1 参数介绍: 参数 含义 m,n 整型:表示矩阵的行和列 density 实数类型:表示矩阵的稀疏度 format str类型:表示矩阵的类型:如format='coo' dtype dtype;表示返回矩阵值的类型 ranom_state {numpy.random.RandomState,int};可选的随机种子

python 中cPickle学习二

写入: import cPickle as p shoplistfile = 'data.data' shoplist = ['meili',['current_account',[100000,1222],'basis_account',[5555555,888]], 'qinshan',['current_account',[1089000,12292],'basis_account',[55555955,888]], 'jiayou',['current_account',[10000,1

python网络爬虫学习资料

第一:Python爬虫学习系列教程(来源于某博主:http://cuiqingcai.com/1052.html) Python版本:2.7 整体目录: 一.爬虫入门 1. Python爬虫入门一之综述 2. Python爬虫入门二之爬虫基础了解 3. Python爬虫入门三之Urllib库的基本使用 4. Python爬虫入门四之Urllib库的高级用法 5. Python爬虫入门五之URLError异常处理 6. Python爬虫入门六之Cookie的使用 7. Python爬虫入门七之正则

python中调用命令行命令

http://blog.csdn.net/pipisorry/article/details/46972171 在Python/wxPython环境下,执行外部命令或者说在Python程序中启动另一个程序的方法 1.os.system(command) os.system()函数用来运行shell命令.此命令可以方便的调用或执行其他脚本和命令 #打开指定的文件 >>>os.system('notepad *.txt') 2.wx.Execute(command, syn=wx.EXEC_

Python学习教程(Python学习路线):教你如何在交互式环境中执行Python程序

Python学习教程(Python学习路线):教你如何在交互式环境中执行Python程序 相信接触过Python的伙伴们都知道运行Python脚本程序的方式有多种,目前主要的方式有:交互式环境运行.命令行窗口运行.开发工具上运行等,其中在不同的操作平台上还互不相同.今天,小编讲些Python基础的内容,以Windows下交互式环境为依托,演示Python程序的运行. 一般来说,顺利安装Python之后,有两种方式可以进入Python交互性环境.一种是在Python自带的IDLE中直接打开交互式窗

正确地学习数据科学中的Python,小白学习Python

大多数有抱负的数据科学家是通过学习为开发人员开设的编程课程开始认识 python 的,他们也开始解决类似 leetcode 网站上的 python 编程难题.他们认为在开始使用 python 分析数据之前,必须熟悉编程概念. 资深数据分析师 Manu Jeevan 认为,这是一个巨大的错误,因为数据科学家使用 python 来对数据进行检索.清洗.可视化和构建模型,而不是开发软件应用程序.实际上,为了完成这些任务,你必须将大部分时间集中在学习 python 中的模块和库上. 请按照下面这个步骤来