写在之前
SQLite 是一个小型的关系型数据库, 它最大的特点在于不需要单独的服务, 零配置. 我们在之前讲过的两个数据库, 不管是 MySQL 还是 MongoDB, 都需要我们安装. 安装之后, 然后运行起来, 其实这就相当于已经有一个相应的服务在跑着.
SQLite 与前面所说的两个数据库不同. 首先 Python 已经将相应的驱动模块作为了标准库的一部分, 只要是你安装了 Python, 就可以使用; 再者它可以类似于操作文件那样来操作 SQLite 数据库文件. 还有一点, SQLite 源代码不受版权限制.
建立连接
SQLite 也是一个关系型数据库, 所以 SQL 可以直接在里面使用. 由于 SQLite 的驱动已经在 Python 里面了, 所以只要引用就可以直接使用, 由于我们之前已经讲过 MySQL 了, 所以对于本次内容理解起来就容易多了.
- >>> import sqlite3
- >>> conn = sqlite3.connect('lite.db')
由上面的代码我们得到了连接对象, 是不是觉得比 MySQL 连接要简单很多呢? 在 sqlite3.connect('lite.db') 中, 如果已经有了那个数据库, 就直接连接它, 如果没有的话, 就会自动建一个. 需要注意的是, 这里的路径是可以随意指定的.
下面的代码显示的是连接对象的属性和方法:
- >>> 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 也很类似, 连接了数据库之后, 要建立游标对象:
>>> cur = conn.cursor()
接下来就是对数据库内容的操作, 都是用游标对象方法来实现:
- >>> 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 指令都可以用:
- >>> create_table = "create table books (title,author,language)"
- >>> cur.execute(create_table)
- <sqlite3.Cursor object at 0x104f296c0>
这样就在数据库 lite.db 中建立了一个表 books. 对这个表可以增加数据:
- >>> cur.execute('insert into books values("python basic","rocky","python")')
- <sqlite3.Cursor object at 0x104f296c0>
为了保证数据能够保存, 还要进行如下操作:
- >>> conn.commit()
- >>> cur.close()
- >>> conn.close()
以上, 在刚才建立的数据库中已经有了一个表 books, 表中已经有了一条记录.
2. 查询
保存以后我们来查询一下:
- >>> 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 表中多增加一些内容, 以便于我们进行其它的操作:
>>> books = [("first book","first","c"),("second book","second","c++"),("third book","third","java")]
这次我们来一个批量插入:
- >>> cur.executemany('insert into books values (?,?,?)',books)
- <sqlite3.Cursor object at 0x104f297a0>
- >>> conn.commit()
接下来我们用循环语句来打印一下查询结果:
- >>> 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 语句来操作数据库:
- >>> cur.execute("update books set title='physics'where author='first'")
- <sqlite3.Cursor object at 0x104f297a0>
- >>> conn.commit()
接下来我们按照条件查询来看一看:
- >>> cur.execute("select * from books where author='first'")
- <sqlite3.Cursor object at 0x104f297a0>
- >>> cur.fetchall()
- [('physics', 'first', 'c')]
5. 删除
删除也是操作数据库必须的动作:
- >>> cur.execute("select * from books")
- <sqlite3.Cursor object at 0x104f297a0>
- >>> cur.fetchall()
- [('python basic', 'rocky', 'python'), ('physics', 'first', 'c'), ('third book', 'third', 'java')]
最后不要忘记在完成对数据库的操作以后, 一定记得给人家「关上门」:
- >>> cur.close()
- >>> conn.close()
写在之后
基本的知识差不多就是这些, 当然肯定不局限于此. 在实际的编程中我们肯定会遇到很多的问题, 大家记得要多多去查阅官方文档, 学会解决问题.
更多内容, 欢迎关注公众号「Python 空间」, 期待和你的交流.
来源: https://www.cnblogs.com/Rocky0429/p/10082290.html