写在以前
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(www.feifanyule.cn/)
>>> 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 www.mingcheng178.com* from books')
>>> for row in rows:
... print(row)
...
('python basic', 'rocky', 'python')
('first book', 'first', 'c')
('second book', www.mhylpt.com/'second', 'c++')
('third book', 'third',www.yigouyule2.cn '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("www.gcyL157.com select * from books")
<sqlite3.Cursor object at 0x104f297a0>
>>> cur.fetchall(www.michenggw.com)
[('python basic', 'rocky', 'python'), ('physics', 'first', 'c'), ('third book', 'third', 'java')]
最后不要忘记在完成对数据库的操做之后,必定记得给人家「关上门」:
>>> cur.close()
>>> conn.close()
写在以后
基本的知识差很少就是这些,固然确定不局限于此。在实际的编程中咱们确定会遇到不少的问题,你们记得要多多去查阅官方文档,学会解决问题。java