写在之前
SQLite 是一个小型的关系型数据库,它最大的特点在于不需要单独的服务、零配置。我们在之前讲过的两个数据库,不管是 MySQL 还是 MongoDB,都需要我们安装。安装之后,然后运行起来,其实这就相当于已经有一个相应的服务在跑着。
SQLite 与前面所说的两个数据库不同。首先Python 已经将相应的驱动模块作为了标准库的一部分,只要是你安装了 Python,就可以使用;再者它可以类似于操作文件那样来操作 SQLite 数据库文件。还有一点,SQLite 源代码不受版权限制。
建立连接
SQLite 也是一个关系型数据库,所以 SQL 可以直接在里面使用。由于 SQLite 的驱动已经在 Python 里面了,所以只要引用就可以直接使用,由于我们之前已经讲过 MySQL 了,所以对于本次内容理解起来就容易多了。
1
2
|
>>> import sqlite3 >>> conn = sqlite3.connect( 'lite.db' ) |
由上面的代码我们得到了连接对象,是不是觉得比 MySQL 连接要简单很多呢?在 sqlite3.connect('lite.db') 中,如果已经有了那个数据库,就直接连接它,如果没有的话,就会自动建一个。需要注意的是,这里的路径是可以随意指定的。
下面的代码显示的是连接对象的属性和方法:
1
2
|
>>> dir (conn) [ 'DataError' , 'DatabaseError' , 'Error' , 'IntegrityError' , 'InterfaceError' , 'InternalError' , 'NotSupportedError' , 'OperationalError' , 'ProgrammingError' , 'Warning' , '__call__' , '__class__' , '__delattr__' , '__dir__' , '__doc__' , '__enter__' , '__eq__' , '__exit__' , '__format__' , '__ge__' , '__getattribute__' , '__gt__' , '__hash__' , '__init__' , '__init_subclass__' , '__le__' , '__lt__' , '__ne__' , '__new__' , '__reduce__' , '__reduce_ex__' , '__repr__' , '__setattr__' , '__sizeof__' , '__str__' , '__subclasshook__' , 'close' , 'commit' , 'create_aggregate' , 'create_collation' , 'create_function' , 'cursor' , 'execute' , 'executemany' , 'executescript' , 'in_transaction' , 'interrupt' , 'isolation_level' , 'iterdump' , 'rollback' , 'row_factory' , 'set_authorizer' , 'set_progress_handler' , 'set_trace_callback' , 'text_factory' , 'total_changes' ] |
建立游标
这一步其实跟 MySQL 也很类似,连接了数据库之后,要建立游标对象:
1
|
>>> cur = conn.cursor() |
接下来就是对数据库内容的操作,都是用游标对象方法来实现:
1
2
|
>>> dir (cur) [ '__class__' , '__delattr__' , '__dir__' , '__doc__' , '__eq__' , '__format__' , '__ge__' , '__getattribute__' , '__gt__' , '__hash__' , '__init__' , '__init_subclass__' , '__iter__' , '__le__' , '__lt__' , '__ne__' , '__new__' , '__next__' , '__reduce__' , '__reduce_ex__' , '__repr__' , '__setattr__' , '__sizeof__' , '__str__' , '__subclasshook__' , 'arraysize' , 'close' , 'connection' , 'description' , 'execute' , 'executemany' , 'executescript' , 'fetchall' , 'fetchmany' , 'fetchone' , 'lastrowid' , 'row_factory' , 'rowcount' , 'setinputsizes' , 'setoutputsize' ] |
我们在里面看到了一系列我们熟悉的名称:close()、execute()、fetchall() 等。
1.创建数据库表
面对 SQLite 数据库,我们之前熟悉的 SQL 指令都可以用:
1
2
3
|
>>> create_table = "create table books (title,author,language)" >>> cur.execute(create_table) <sqlite3.Cursor object at 0x104f296c0 > |
这样就在数据库 lite.db 中建立了一个表 books。对这个表可以增加数据:
1
2
|
>>> cur.execute( 'insert into books values("python basic","rocky","python")' ) <sqlite3.Cursor object at 0x104f296c0 > |
为了保证数据能够保存,还要进行如下操作:
1
2
3
|
>>> conn.commit() >>> cur.close() >>> conn.close() |
以上,在刚才建立的数据库中已经有了一个表 books,表中已经有了一条记录。
2.查询
保存以后我们来查询一下:
1
2
3
4
5
6
|
>>> conn = sqlite3.connect( 'lite.db' ) >>> cur = conn.cursor() >>> cur.execute( 'select * from books' ) <sqlite3.Cursor object at 0x104f297a0 > >>> cur.fetchall() [( 'python basic' , 'rocky' , 'python' )] |
3.批量插入
我们来给 books 表中多增加一些内容,以便于我们进行其它的操作:
1
|
>>> books = [( "first book" , "first" , "c" ),( "second book" , "second" , "c++" ),( "third book" , "third" , "java" )] |
这次我们来一个批量插入:
1
2
3
|
>>> cur.executemany( 'insert into books values (?,?,?)' ,books) <sqlite3.Cursor object at 0x104f297a0 > >>> conn.commit() |
接下来我们用循环语句来打印一下查询结果:
1
2
3
4
5
6
7
8
|
>>> rows = cur.execute( 'select * from books' ) >>> for row in rows: ... print (row) ... ( 'python basic' , 'rocky' , 'python' ) ( 'first book' , 'first' , 'c' ) ( 'second book' , 'second' , 'c++' ) ( 'third book' , 'third' , 'java' ) |
4.更新
正如我们前面所说的,在 cur.execute() 中,可以写 SQL 语句来操作数据库:
1
2
3
|
>>> cur.execute( "update books set id="codetool">
接下来我们按照条件查询来看一看:
5.删除 删除也是操作数据库必须的动作:
最后不要忘记在完成对数据库的操作以后,一定记得给人家「关上门」:
写在之后 基本的知识差不多就是这些,当然肯定不局限于此。在实际的编程中我们肯定会遇到很多的问题,大家记得要多多去查阅官方文档,学会解决问题。 至此,Python 操作数据这一部分就结束了,其实不光是这一个章节的结束,我计划里面的整个「零基础入门学习 Python」这个系列也到此结束了,后续随着我碰到的知识的增加,还会再给大家更新关于 Python 方面的东西,让我们一起加油。 如果你觉得本篇文章对你有所帮助的话,欢迎点赞 + 关注,期待和你的交流。 The end。 以上就是Python 如何操作 SQLite 数据库的详细内容,更多关于python操作 SQLite 数据库的资料请关注服务器之家其它相关文章! 原文链接:https://cloud.tencent.com/developer/article/1534514 延伸 · 阅读
精彩推荐
|