2
2
3
3
#SQLite数据库
4
4
5
- SQLite是一个小型的关系型数据库,它最大的特点在于不需要服务器、零配置。在前面的两个服务器 ,不管是MySQL还是MongoDB,都需要“安装”,安装之后,它运行起来 ,其实是已经有一个相应的服务器在跑着呢。而SQLite不需要这样,首先python已经将相应的驱动模块作为标准库一部分了,只要安装了python,就可以使用;另外,它也不需要服务器,可以类似操作文件那样来操作SQLite数据库文件。还有一点也不错,SQLite源代码不受版权限制 。
5
+ SQLite是一个小型的关系型数据库,它最大的特点在于不需要服务器、零配置。前面的两个数据库 ,不管是MySQL还是MongoDB,都需要“安装”,安装之后,运行起来 ,其实是已经有一个相应的服务器在跑着呢。
6
6
7
- SQLite也是一个关系型数据库,所以SQL语句,都可以在里面使用 。
7
+ 而SQLite不需要这样。首先Python已经将相应的驱动模块作为标准库一部分了,只要安装了Python,就可以使用;另外,它也不需要服务器,可以类似操作文件那样来操作SQLite数据库文件。还有一点也不错,SQLite源代码不受版权限制 。
8
8
9
- 跟操作mysql数据库类似,对于SQLite数据库,也要通过以下几步:
9
+ SQLite也是一个关系型数据库,所以SQL语句可以在里面使用。
10
+
11
+ 跟操作MySQL数据库类似,对于SQLite数据库,也要通过以下几步:
10
12
11
13
- 建立连接对象
12
14
- 连接对象方法:建立游标对象
13
15
- 游标对象方法:执行sql语句
14
16
15
17
##建立连接对象
16
18
17
- 由于SQLite数据库的驱动已经在python里面了 ,所以,只要引用就可以直接使用
19
+ 由于SQLite数据库的驱动已经在Python里面了 ,所以,只要引用就可以直接使用。并且在学过MySQL的基础上,理解本节能容就容易多了。
18
20
19
21
>>> import sqlite3
20
22
>>> conn = sqlite3.connect("23301.db")
21
23
22
- 这样就得到了连接对象,是不是比mysql连接要简化了很多呢 。在` sqlite3.connect("23301.db") ` 语句中 ,如果已经有了那个数据库,就连接上它;如果没有,就新建一个。注意,这里的路径可以随意指定的。
24
+ 这样就得到了连接对象,是不是比MySQL连接要简化了很多呢 。在` sqlite3.connect("23301.db") ` 中 ,如果已经有了那个数据库,就连接上它;如果没有,就新建一个。注意,这里的路径可以随意指定的。
23
25
24
26
不妨到目录中看一看,是否存在了刚才建立的数据库文件。
25
27
26
28
/2code$ ls 23301.db
27
29
23301.db
28
30
29
- 果然有了一个文件。
30
-
31
- 连接对象建立起来之后,就要使用连接对象的方法继续工作了。
31
+ 果然有了一个文件。连接对象建立起来之后,就要使用连接对象的方法继续工作了。
32
32
33
33
>>> dir(conn)
34
34
['DataError', 'DatabaseError', 'Error', 'IntegrityError', 'InterfaceError', 'InternalError', 'NotSupportedError', 'OperationalError', 'ProgrammingError', 'Warning', '__call__', '__class__', '__delattr__', '__doc__', '__enter__', '__exit__', '__format__', '__getattribute__', '__hash__', '__init__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'close', 'commit', 'create_aggregate', 'create_collation', 'create_function', 'cursor', 'enable_load_extension', 'execute', 'executemany', 'executescript', 'interrupt', 'isolation_level', 'iterdump', 'load_extension', 'rollback', 'row_factory', 'set_authorizer', 'set_progress_handler', 'text_factory', 'total_changes']
35
35
36
36
##游标对象
37
37
38
- 这步跟mysql也类似 ,要建立游标对象。
38
+ 这一步跟MySQL也类似 ,要建立游标对象。
39
39
40
40
>>> cur = conn.cursor()
41
41
42
- 接下来对数据库内容的操作,都是用游标对象方法来实现了 :
42
+ 接下来对数据库内容的操作,都是用游标对象方法来实现 :
43
43
44
44
>>> dir(cur)
45
45
['__class__', '__delattr__', '__doc__', '__format__', '__getattribute__', '__hash__', '__init__', '__iter__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'arraysize', 'close', 'connection', 'description', 'execute', 'executemany', 'executescript', 'fetchall', 'fetchmany', 'fetchone', 'lastrowid', 'next', 'row_factory', 'rowcount', 'setinputsizes', 'setoutputsize']
46
46
47
- 是不是看到熟悉的名称了 :` close(), execute(), executemany(), fetchall() `
47
+ 看到熟悉的名称了 :` close(), execute(), executemany(), fetchall() `
48
48
49
49
###创建数据库表
50
50
51
- 在mysql中,我们演示的是利用mysql的shell来创建的表。其实,当然可以使用sql语句,在python中实现这个功能。这里对sqlite数据库,就如此操作一番 。
51
+ 面对SQLite数据库,读者曾经数据的sql指令都可以照样使用 。
52
52
53
53
>>> create_table = "create table books (title text, author text, lang text) "
54
54
>>> cur.execute(create_table)
55
55
<sqlite3.Cursor object at 0xb73ed5a0>
56
56
57
- 这样就在数据库23301.db中建立了一个表books。对这个表可以增加数据了:
57
+ 这样就在数据库23301.db中建立了一个表books。对这个表可以增加数据了。
58
58
59
59
>>> cur.execute('insert into books values ("from beginner to master", "laoqi", "python")')
60
60
<sqlite3.Cursor object at 0xb73ed5a0>
61
61
62
- 为了保证数据能够保存,还要 (这是多么熟悉的操作流程和命令呀):
62
+ 为了保证数据能够保存,还要如下操作 (这是多么熟悉的操作流程和命令呀):
63
63
64
64
>>> conn.commit()
65
65
>>> cur.close()
66
66
>>> conn.close()
67
67
68
- 支持,刚才建立的那个数据库中,已经有了一个表books,表中已经有了一条记录。
69
-
70
- 整个流程都不陌生。
68
+ 在刚才建立的那个数据库中,已经有了一个表books,表中已经有了一条记录。
71
69
72
70
###查询
73
71
@@ -77,7 +75,7 @@ SQLite也是一个关系型数据库,所以SQL语句,都可以在里面使
77
75
>>> cur = conn.cursor()
78
76
>>> cur.execute('select * from books')
79
77
<sqlite3.Cursor object at 0xb73edea0>
80
- >>> print cur.fetchall()
78
+ >>> print cur.fetchall() #Python 3: print(cur.fetchall())
81
79
[(u'from beginner to master', u'laoqi', u'python')]
82
80
83
81
###批量插入
@@ -86,17 +84,17 @@ SQLite也是一个关系型数据库,所以SQL语句,都可以在里面使
86
84
87
85
>>> books = [("first book","first","c"), ("second book","second","c"), ("third book","second","python")]
88
86
89
- 这回来一个批量插入
87
+ 这回来一个批量插入:
90
88
91
89
>>> cur.executemany('insert into books values (?,?,?)', books)
92
90
<sqlite3.Cursor object at 0xb73edea0>
93
91
>>> conn.commit()
94
92
95
- 用循环语句打印一下查询结果 :
93
+ 用循环语句打印查询结果 :
96
94
97
95
>>> rows = cur.execute('select * from books')
98
96
>>> for row in rows:
99
- ... print row
97
+ ... print row #Python 3: print(row)
100
98
...
101
99
(u'from beginner to master', u'laoqi', u'python')
102
100
(u'first book', u'first', u'c')
@@ -105,7 +103,7 @@ SQLite也是一个关系型数据库,所以SQL语句,都可以在里面使
105
103
106
104
###更新
107
105
108
- 正如前面所说,在cur .execute()中,你可以写SQL语句,来操作数据库 。
106
+ 正如前面所说,在 ` cur .execute()` 中,你可以写SQL语句来操作数据库 。
109
107
110
108
>>> cur.execute("update books set title='physics' where author='first'")
111
109
<sqlite3.Cursor object at 0xb73edea0>
@@ -120,7 +118,7 @@ SQLite也是一个关系型数据库,所以SQL语句,都可以在里面使
120
118
121
119
###删除
122
120
123
- 在sql语句中,这也是常用的 。
121
+ 删除也是操作数据库必须的动作 。
124
122
125
123
>>> cur.execute("delete from books where author='second'")
126
124
<sqlite3.Cursor object at 0xb73edea0>
@@ -131,12 +129,12 @@ SQLite也是一个关系型数据库,所以SQL语句,都可以在里面使
131
129
>>> cur.fetchall()
132
130
[(u'from beginner to master', u'laoqi', u'python'), (u'physics', u'first', u'c')]
133
131
134
- 不要忘记,在你完成对数据库的操作是 ,一定要关门才能走人:
132
+ 不要忘记,在完成对数据库的操作后 ,一定要关门才能走人:
135
133
136
134
>>> cur.close()
137
135
>>> conn.close()
138
136
139
- 作为基本知识,已经介绍差不多了 。当然,在实践的编程中,或许会遇到问题,就请读者多参考官方文档:[ https://docs.python.org/2/library/sqlite3.html ] ( https://docs.python.org/2/library/sqlite3.html )
137
+ 基本知识已经介绍差不多了 。当然,在实践的编程中,或许会遇到问题,就请读者多参考官方文档:[ https://docs.python.org/2/library/sqlite3.html ] ( https://docs.python.org/2/library/sqlite3.html )
140
138
141
139
------
142
140
0 commit comments