Python 开发SQLite 两个例子

本文转载

链接:http://my.oschina.net/sanpeterguo/blog/293880

python开发_sqlite3_绝对完整

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
#python sqlite
 
#Author : Hongten
#MailTo : hongtenzone@foxmail.com
#QQ     : 648719819
#Blog   : http://www.cnblogs.com/hongten
#Create : 2013-08-09
#Version: 1.0
 
#DB-API 2.0 interface for SQLite databases
 
import  sqlite3
import  os
'''SQLite数据库是一款非常小巧的嵌入式开源数据库软件,也就是说
没有独立的维护进程,所有的维护都来自于程序本身。
在python中,使用sqlite3创建数据库的连接,当我们指定的数据库文件不存在的时候
连接对象会自动创建数据库文件;如果数据库文件已经存在,则连接对象不会再创建
数据库文件,而是直接打开该数据库文件。
     连接对象可以是硬盘上面的数据库文件,也可以是建立在内存中的,在内存中的数据库
     执行完任何操作后,都不需要提交事务的(commit)
 
     创建在硬盘上面: conn = sqlite3.connect('c:\\test\\test.db')
     创建在内存上面: conn = sqlite3.connect('"memory:')
 
     下面我们一硬盘上面创建数据库文件为例来具体说明:
     conn = sqlite3.connect('c:\\test\\hongten.db')
     其中conn对象是数据库链接对象,而对于数据库链接对象来说,具有以下操作:
 
         commit()            --事务提交
         rollback()          --事务回滚
         close()             --关闭一个数据库链接
         cursor()            --创建一个游标
 
     cu = conn.cursor()
     这样我们就创建了一个游标对象:cu
     在sqlite3中,所有sql语句的执行都要在游标对象的参与下完成
     对于游标对象cu,具有以下具体操作:
 
         execute()           --执行一条sql语句
         executemany()       --执行多条sql语句
         close()             --游标关闭
         fetchone()          --从结果中取出一条记录
         fetchmany()         --从结果中取出多条记录
         fetchall()          --从结果中取出所有记录
         scroll()            --游标滚动
 
'''
 
#global var
#数据库文件绝句路径
DB_FILE_PATH  =  ''
#表名称
TABLE_NAME  =  ''
#是否打印sql
SHOW_SQL  =  True
 
def  get_conn(path):
     '''获取到数据库的连接对象,参数为数据库文件的绝对路径
     如果传递的参数是存在,并且是文件,那么就返回硬盘上面改
     路径下的数据库文件的连接对象;否则,返回内存中的数据接
     连接对象'''
     conn  =  sqlite3.connect(path)
     if  os.path.exists(path)  and  os.path.isfile(path):
         print ( '硬盘上面:[{}]' . format (path))
         return  conn
     else :
         conn  =  None
         print ( '内存上面:[:memory:]' )
         return  sqlite3.connect( ':memory:' )
 
def  get_cursor(conn):
     '''该方法是获取数据库的游标对象,参数为数据库的连接对象
     如果数据库的连接对象不为None,则返回数据库连接对象所创
     建的游标对象;否则返回一个游标对象,该对象是内存中数据
     库连接对象所创建的游标对象'''
     if  conn  is  not  None :
         return  conn.cursor()
     else :
         return  get_conn('').cursor()
 
###############################################################
####            创建|删除表操作     START
###############################################################
def  drop_table(conn, table):
     '''如果表存在,则删除表,如果表中存在数据的时候,使用该
     方法的时候要慎用!'''
     if  table  is  not  None  and  table ! =  '':
         sql  =  'DROP TABLE IF EXISTS '  +  table
         if  SHOW_SQL:
             print ( '执行sql:[{}]' . format (sql))
         cu  =  get_cursor(conn)
         cu.execute(sql)
         conn.commit()
         print ( '删除数据库表[{}]成功!' . format (table))
         close_all(conn, cu)
     else :
         print ( 'the [{}] is empty or equal None!' . format (sql))
 
def  create_table(conn, sql):
     '''创建数据库表:student'''
     if  sql  is  not  None  and  sql ! =  '':
         cu  =  get_cursor(conn)
         if  SHOW_SQL:
             print ( '执行sql:[{}]' . format (sql))
         cu.execute(sql)
         conn.commit()
         print ( '创建数据库表[student]成功!' )
         close_all(conn, cu)
     else :
         print ( 'the [{}] is empty or equal None!' . format (sql))
 
###############################################################
####            创建|删除表操作     END
###############################################################
 
def  close_all(conn, cu):
     '''关闭数据库游标对象和数据库连接对象'''
     try :
         if  cu  is  not  None :
             cu.close()
     finally :
         if  cu  is  not  None :
             cu.close()
 
###############################################################
####            数据库操作CRUD     START
###############################################################
 
def  save(conn, sql, data):
     '''插入数据'''
     if  sql  is  not  None  and  sql ! =  '':
         if  data  is  not  None :
             cu  =  get_cursor(conn)
             for  in  data:
                 if  SHOW_SQL:
                     print ( '执行sql:[{}],参数:[{}]' . format (sql, d))
                 cu.execute(sql, d)
                 conn.commit()
             close_all(conn, cu)
     else :
         print ( 'the [{}] is empty or equal None!' . format (sql))
 
def  fetchall(conn, sql):
     '''查询所有数据'''
     if  sql  is  not  None  and  sql ! =  '':
         cu  =  get_cursor(conn)
         if  SHOW_SQL:
             print ( '执行sql:[{}]' . format (sql))
         cu.execute(sql)
         =  cu.fetchall()
         if  len (r) >  0 :
             for  in  range ( len (r)):
                 print (r[e])
     else :
         print ( 'the [{}] is empty or equal None!' . format (sql)) 
 
def  fetchone(conn, sql, data):
     '''查询一条数据'''
     if  sql  is  not  None  and  sql ! =  '':
         if  data  is  not  None :
             #Do this instead
             =  (data,) 
             cu  =  get_cursor(conn)
             if  SHOW_SQL:
                 print ( '执行sql:[{}],参数:[{}]' . format (sql, data))
             cu.execute(sql, d)
             =  cu.fetchall()
             if  len (r) >  0 :
                 for  in  range ( len (r)):
                     print (r[e])
         else :
             print ( 'the [{}] equal None!' . format (data))
     else :
         print ( 'the [{}] is empty or equal None!' . format (sql))
 
def  update(conn, sql, data):
     '''更新数据'''
     if  sql  is  not  None  and  sql ! =  '':
         if  data  is  not  None :
             cu  =  get_cursor(conn)
             for  in  data:
                 if  SHOW_SQL:
                     print ( '执行sql:[{}],参数:[{}]' . format (sql, d))
                 cu.execute(sql, d)
                 conn.commit()
             close_all(conn, cu)
     else :
         print ( 'the [{}] is empty or equal None!' . format (sql))
 
def  delete(conn, sql, data):
     '''删除数据'''
     if  sql  is  not  None  and  sql ! =  '':
         if  data  is  not  None :
             cu  =  get_cursor(conn)
             for  in  data:
                 if  SHOW_SQL:
                     print ( '执行sql:[{}],参数:[{}]' . format (sql, d))
                 cu.execute(sql, d)
                 conn.commit()
             close_all(conn, cu)
     else :
         print ( 'the [{}] is empty or equal None!' . format (sql))
###############################################################
####            数据库操作CRUD     END
###############################################################
 
 
###############################################################
####            测试操作     START
###############################################################
def  drop_table_test():
     '''删除数据库表测试'''
     print ( '删除数据库表测试...' )
     conn  =  get_conn(DB_FILE_PATH)
     drop_table(conn, TABLE_NAME)
 
def  create_table_test():
     '''创建数据库表测试'''
     print ( '创建数据库表测试...' )
     create_table_sql  =  '''CREATE TABLE `student` (
                           `id` int(11) NOT NULL,
                           `name` varchar(20) NOT NULL,
                           `gender` varchar(4) DEFAULT NULL,
                           `age` int(11) DEFAULT NULL,
                           `address` varchar(200) DEFAULT NULL,
                           `phone` varchar(20) DEFAULT NULL,
                            PRIMARY KEY (`id`)
                         )'''
     conn  =  get_conn(DB_FILE_PATH)
     create_table(conn, create_table_sql)
 
def  save_test():
     '''保存数据测试...'''
     print ( '保存数据测试...' )
     save_sql  =  '''INSERT INTO student values (?, ?, ?, ?, ?, ?)'''
     data  =  [( 1 'Hongten' '男' 20 '广东省广州市' '13423****62' ),
             ( 2 'Tom' '男' 22 '美国旧金山' '15423****63' ),
             ( 3 'Jake' '女' 18 '广东省广州市' '18823****87' ),
             ( 4 'Cate' '女' 21 '广东省广州市' '14323****32' )]
     conn  =  get_conn(DB_FILE_PATH)
     save(conn, save_sql, data)
 
def  fetchall_test():
     '''查询所有数据...'''
     print ( '查询所有数据...' )
     fetchall_sql  =  '''SELECT * FROM student'''
     conn  =  get_conn(DB_FILE_PATH)
     fetchall(conn, fetchall_sql)
 
def  fetchone_test():
     '''查询一条数据...'''
     print ( '查询一条数据...' )
     fetchone_sql  =  'SELECT * FROM student WHERE ID = ? '
     data  =  1
     conn  =  get_conn(DB_FILE_PATH)
     fetchone(conn, fetchone_sql, data)
 
def  update_test():
     '''更新数据...'''
     print ( '更新数据...' )
     update_sql  =  'UPDATE student SET name = ? WHERE ID = ? '
     data  =  [( 'HongtenAA' 1 ),
             ( 'HongtenBB' 2 ),
             ( 'HongtenCC' 3 ),
             ( 'HongtenDD' 4 )]
     conn  =  get_conn(DB_FILE_PATH)
     update(conn, update_sql, data)
 
def  delete_test():
     '''删除数据...'''
     print ( '删除数据...' )
     delete_sql  =  'DELETE FROM student WHERE NAME = ? AND ID = ? '
     data  =  [( 'HongtenAA' 1 ),
             ( 'HongtenCC' 3 )]
     conn  =  get_conn(DB_FILE_PATH)
     delete(conn, delete_sql, data)
 
###############################################################
####            测试操作     END
###############################################################
 
def  init():
     '''初始化方法'''
     #数据库文件绝句路径
     global  DB_FILE_PATH
     DB_FILE_PATH  =  'c:\\test\\hongten.db'
     #数据库表名称
     global  TABLE_NAME
     TABLE_NAME  =  'student'
     #是否打印sql
     global  SHOW_SQL
     SHOW_SQL  =  True
     print ( 'show_sql : {}' . format (SHOW_SQL))
     #如果存在数据库表,则删除表
     drop_table_test()
     #创建数据库表student
     create_table_test()
     #向数据库表中插入数据
     save_test()
     
 
def  main():
     init()
     fetchall_test()
     print ( '#'  *  50 )
     fetchone_test()
     print ( '#'  *  50 )
     update_test()
     fetchall_test()
     print ( '#'  *  50 )
     delete_test()
     fetchall_test()
 
if  __name__  = =  '__main__' :
     main()




本文转载

作者:

链接:http://www.cnblogs.com/hongten/p/hongten_python_sqlite3.html

python开发_sqlite3_绝对完整_博主推荐


复制代码
'''SQLite数据库是一款非常小巧的嵌入式开源数据库软件,也就是说
没有独立的维护进程,所有的维护都来自于程序本身。
在python中,使用sqlite3创建数据库的连接,当我们指定的数据库文件不存在的时候
连接对象会自动创建数据库文件;如果数据库文件已经存在,则连接对象不会再创建
数据库文件,而是直接打开该数据库文件。
    连接对象可以是硬盘上面的数据库文件,也可以是建立在内存中的,在内存中的数据库
    执行完任何操作后,都不需要提交事务的(commit)

    创建在硬盘上面: conn = sqlite3.connect('c:\\test\\test.db')
    创建在内存上面: conn = sqlite3.connect('"memory:')

    下面我们一硬盘上面创建数据库文件为例来具体说明:
    conn = sqlite3.connect('c:\\test\\hongten.db')
    其中conn对象是数据库链接对象,而对于数据库链接对象来说,具有以下操作:

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

    cu = conn.cursor()
    这样我们就创建了一个游标对象:cu
    在sqlite3中,所有sql语句的执行都要在游标对象的参与下完成
    对于游标对象cu,具有以下具体操作:

        execute()           --执行一条sql语句
        executemany()       --执行多条sql语句
        close()             --游标关闭
        fetchone()          --从结果中取出一条记录
        fetchmany()         --从结果中取出多条记录
        fetchall()          --从结果中取出所有记录
        scroll()            --游标滚动

'''
复制代码

下面是我做的demo,在demo中,我做了很详细的注释和功能的演示,详情如下:

运行效果

SHOW_SQL = False的时候:

复制代码
Python 3.3.2 (v3.3.2:d047928ae3f6, May 16 2013, 00:03:43) [MSC v.1600 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> ================================ RESTART ================================
>>> 
show_sql : False
删除数据库表测试...
硬盘上面:[c:\test\hongten.db]
删除数据库表[student]成功!
创建数据库表测试...
硬盘上面:[c:\test\hongten.db]
创建数据库表[student]成功!
保存数据测试...
硬盘上面:[c:\test\hongten.db]
查询所有数据...
硬盘上面:[c:\test\hongten.db]
(1, 'Hongten', '', 20, '广东省广州市', '13423****62')
(2, 'Tom', '', 22, '美国旧金山', '15423****63')
(3, 'Jake', '', 18, '广东省广州市', '18823****87')
(4, 'Cate', '', 21, '广东省广州市', '14323****32')
##################################################
查询一条数据...
硬盘上面:[c:\test\hongten.db]
(1, 'Hongten', '', 20, '广东省广州市', '13423****62')
##################################################
更新数据...
硬盘上面:[c:\test\hongten.db]
查询所有数据...
硬盘上面:[c:\test\hongten.db]
(1, 'HongtenAA', '', 20, '广东省广州市', '13423****62')
(2, 'HongtenBB', '', 22, '美国旧金山', '15423****63')
(3, 'HongtenCC', '', 18, '广东省广州市', '18823****87')
(4, 'HongtenDD', '', 21, '广东省广州市', '14323****32')
##################################################
删除数据...
硬盘上面:[c:\test\hongten.db]
查询所有数据...
硬盘上面:[c:\test\hongten.db]
(2, 'HongtenBB', '', 22, '美国旧金山', '15423****63')
(4, 'HongtenDD', '', 21, '广东省广州市', '14323****32')
>>> 
复制代码

SHOW_SQL = True的时候:

复制代码
Python 3.3.2 (v3.3.2:d047928ae3f6, May 16 2013, 00:03:43) [MSC v.1600 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> ================================ RESTART ================================
>>> 
show_sql : True
删除数据库表测试...
硬盘上面:[c:\test\hongten.db]
执行sql:[DROP TABLE IF EXISTS student]
删除数据库表[student]成功!
创建数据库表测试...
硬盘上面:[c:\test\hongten.db]
执行sql:[CREATE TABLE `student` (
                          `id` int(11) NOT NULL,
                          `name` varchar(20) NOT NULL,
                          `gender` varchar(4) DEFAULT NULL,
                          `age` int(11) DEFAULT NULL,
                          `address` varchar(200) DEFAULT NULL,
                          `phone` varchar(20) DEFAULT NULL,
                           PRIMARY KEY (`id`)
                        )]
创建数据库表[student]成功!
保存数据测试...
硬盘上面:[c:\test\hongten.db]
执行sql:[INSERT INTO student values (?, ?, ?, ?, ?, ?)],参数:[(1, 'Hongten', '', 20, '广东省广州市', '13423****62')]
执行sql:[INSERT INTO student values (?, ?, ?, ?, ?, ?)],参数:[(2, 'Tom', '', 22, '美国旧金山', '15423****63')]
执行sql:[INSERT INTO student values (?, ?, ?, ?, ?, ?)],参数:[(3, 'Jake', '', 18, '广东省广州市', '18823****87')]
执行sql:[INSERT INTO student values (?, ?, ?, ?, ?, ?)],参数:[(4, 'Cate', '', 21, '广东省广州市', '14323****32')]
查询所有数据...
硬盘上面:[c:\test\hongten.db]
执行sql:[SELECT * FROM student]
(1, 'Hongten', '', 20, '广东省广州市', '13423****62')
(2, 'Tom', '', 22, '美国旧金山', '15423****63')
(3, 'Jake', '', 18, '广东省广州市', '18823****87')
(4, 'Cate', '', 21, '广东省广州市', '14323****32')
##################################################
查询一条数据...
硬盘上面:[c:\test\hongten.db]
执行sql:[SELECT * FROM student WHERE ID = ? ],参数:[1]
(1, 'Hongten', '', 20, '广东省广州市', '13423****62')
##################################################
更新数据...
硬盘上面:[c:\test\hongten.db]
执行sql:[UPDATE student SET name = ? WHERE ID = ? ],参数:[('HongtenAA', 1)]
执行sql:[UPDATE student SET name = ? WHERE ID = ? ],参数:[('HongtenBB', 2)]
执行sql:[UPDATE student SET name = ? WHERE ID = ? ],参数:[('HongtenCC', 3)]
执行sql:[UPDATE student SET name = ? WHERE ID = ? ],参数:[('HongtenDD', 4)]
查询所有数据...
硬盘上面:[c:\test\hongten.db]
执行sql:[SELECT * FROM student]
(1, 'HongtenAA', '', 20, '广东省广州市', '13423****62')
(2, 'HongtenBB', '', 22, '美国旧金山', '15423****63')
(3, 'HongtenCC', '', 18, '广东省广州市', '18823****87')
(4, 'HongtenDD', '', 21, '广东省广州市', '14323****32')
##################################################
删除数据...
硬盘上面:[c:\test\hongten.db]
执行sql:[DELETE FROM student WHERE NAME = ? AND ID = ? ],参数:[('HongtenAA', 1)]
执行sql:[DELETE FROM student WHERE NAME = ? AND ID = ? ],参数:[('HongtenCC', 3)]
查询所有数据...
硬盘上面:[c:\test\hongten.db]
执行sql:[SELECT * FROM student]
(2, 'HongtenBB', '', 22, '美国旧金山', '15423****63')
(4, 'HongtenDD', '', 21, '广东省广州市', '14323****32')
>>> 
复制代码

=========================================

具体代码:

=========================================

复制代码
  1 #python sqlite
  2 
  3 #Author : Hongten
  4 #MailTo : hongtenzone@foxmail.com
  5 #QQ     : 648719819
  6 #Blog   : http://www.cnblogs.com/hongten
  7 #Create : 2013-08-09
  8 #Version: 1.0
  9 
 10 #DB-API 2.0 interface for SQLite databases
 11 
 12 import sqlite3
 13 import os
 14 '''SQLite数据库是一款非常小巧的嵌入式开源数据库软件,也就是说
 15 没有独立的维护进程,所有的维护都来自于程序本身。
 16 在python中,使用sqlite3创建数据库的连接,当我们指定的数据库文件不存在的时候
 17 连接对象会自动创建数据库文件;如果数据库文件已经存在,则连接对象不会再创建
 18 数据库文件,而是直接打开该数据库文件。
 19     连接对象可以是硬盘上面的数据库文件,也可以是建立在内存中的,在内存中的数据库
 20     执行完任何操作后,都不需要提交事务的(commit)
 21 
 22     创建在硬盘上面: conn = sqlite3.connect('c:\\test\\test.db')
 23     创建在内存上面: conn = sqlite3.connect('"memory:')
 24 
 25     下面我们一硬盘上面创建数据库文件为例来具体说明:
 26     conn = sqlite3.connect('c:\\test\\hongten.db')
 27     其中conn对象是数据库链接对象,而对于数据库链接对象来说,具有以下操作:
 28 
 29         commit()            --事务提交
 30         rollback()          --事务回滚
 31         close()             --关闭一个数据库链接
 32         cursor()            --创建一个游标
 33 
 34     cu = conn.cursor()
 35     这样我们就创建了一个游标对象:cu
 36     在sqlite3中,所有sql语句的执行都要在游标对象的参与下完成
 37     对于游标对象cu,具有以下具体操作:
 38 
 39         execute()           --执行一条sql语句
 40         executemany()       --执行多条sql语句
 41         close()             --游标关闭
 42         fetchone()          --从结果中取出一条记录
 43         fetchmany()         --从结果中取出多条记录
 44         fetchall()          --从结果中取出所有记录
 45         scroll()            --游标滚动
 46 
 47 '''
 48 
 49 #global var
 50 #数据库文件绝句路径
 51 DB_FILE_PATH = ''
 52 #表名称
 53 TABLE_NAME = ''
 54 #是否打印sql
 55 SHOW_SQL = True
 56 
 57 def get_conn(path):
 58     '''获取到数据库的连接对象,参数为数据库文件的绝对路径
 59     如果传递的参数是存在,并且是文件,那么就返回硬盘上面改
 60     路径下的数据库文件的连接对象;否则,返回内存中的数据接
 61     连接对象'''
 62     conn = sqlite3.connect(path)
 63     if os.path.exists(path) and os.path.isfile(path):
 64         print('硬盘上面:[{}]'.format(path))
 65         return conn
 66     else:
 67         conn = None
 68         print('内存上面:[:memory:]')
 69         return sqlite3.connect(':memory:')
 70 
 71 def get_cursor(conn):
 72     '''该方法是获取数据库的游标对象,参数为数据库的连接对象
 73     如果数据库的连接对象不为None,则返回数据库连接对象所创
 74     建的游标对象;否则返回一个游标对象,该对象是内存中数据
 75     库连接对象所创建的游标对象'''
 76     if conn is not None:
 77         return conn.cursor()
 78     else:
 79         return get_conn('').cursor()
 80 
 81 ###############################################################
 82 ####            创建|删除表操作     START
 83 ###############################################################
 84 def drop_table(conn, table):
 85     '''如果表存在,则删除表,如果表中存在数据的时候,使用该
 86     方法的时候要慎用!'''
 87     if table is not None and table != '':
 88         sql = 'DROP TABLE IF EXISTS ' + table
 89         if SHOW_SQL:
 90             print('执行sql:[{}]'.format(sql))
 91         cu = get_cursor(conn)
 92         cu.execute(sql)
 93         conn.commit()
 94         print('删除数据库表[{}]成功!'.format(table))
 95         close_all(conn, cu)
 96     else:
 97         print('the [{}] is empty or equal None!'.format(sql))
 98 
 99 def create_table(conn, sql):
100     '''创建数据库表:student'''
101     if sql is not None and sql != '':
102         cu = get_cursor(conn)
103         if SHOW_SQL:
104             print('执行sql:[{}]'.format(sql))
105         cu.execute(sql)
106         conn.commit()
107         print('创建数据库表[student]成功!')
108         close_all(conn, cu)
109     else:
110         print('the [{}] is empty or equal None!'.format(sql))
111 
112 ###############################################################
113 ####            创建|删除表操作     END
114 ###############################################################
115 
116 def close_all(conn, cu):
117     '''关闭数据库游标对象和数据库连接对象'''
118     try:
119         if cu is not None:
120             cu.close()
121     finally:
122         if cu is not None:
123             cu.close()
124 
125 ###############################################################
126 ####            数据库操作CRUD     START
127 ###############################################################
128 
129 def save(conn, sql, data):
130     '''插入数据'''
131     if sql is not None and sql != '':
132         if data is not None:
133             cu = get_cursor(conn)
134             for d in data:
135                 if SHOW_SQL:
136                     print('执行sql:[{}],参数:[{}]'.format(sql, d))
137                 cu.execute(sql, d)
138                 conn.commit()
139             close_all(conn, cu)
140     else:
141         print('the [{}] is empty or equal None!'.format(sql))
142 
143 def fetchall(conn, sql):
144     '''查询所有数据'''
145     if sql is not None and sql != '':
146         cu = get_cursor(conn)
147         if SHOW_SQL:
148             print('执行sql:[{}]'.format(sql))
149         cu.execute(sql)
150         r = cu.fetchall()
151         if len(r) > 0:
152             for e in range(len(r)):
153                 print(r[e])
154     else:
155         print('the [{}] is empty or equal None!'.format(sql)) 
156 
157 def fetchone(conn, sql, data):
158     '''查询一条数据'''
159     if sql is not None and sql != '':
160         if data is not None:
161             #Do this instead
162             d = (data,) 
163             cu = get_cursor(conn)
164             if SHOW_SQL:
165                 print('执行sql:[{}],参数:[{}]'.format(sql, data))
166             cu.execute(sql, d)
167             r = cu.fetchall()
168             if len(r) > 0:
169                 for e in range(len(r)):
170                     print(r[e])
171         else:
172             print('the [{}] equal None!'.format(data))
173     else:
174         print('the [{}] is empty or equal None!'.format(sql))
175 
176 def update(conn, sql, data):
177     '''更新数据'''
178     if sql is not None and sql != '':
179         if data is not None:
180             cu = get_cursor(conn)
181             for d in data:
182                 if SHOW_SQL:
183                     print('执行sql:[{}],参数:[{}]'.format(sql, d))
184                 cu.execute(sql, d)
185                 conn.commit()
186             close_all(conn, cu)
187     else:
188         print('the [{}] is empty or equal None!'.format(sql))
189 
190 def delete(conn, sql, data):
191     '''删除数据'''
192     if sql is not None and sql != '':
193         if data is not None:
194             cu = get_cursor(conn)
195             for d in data:
196                 if SHOW_SQL:
197                     print('执行sql:[{}],参数:[{}]'.format(sql, d))
198                 cu.execute(sql, d)
199                 conn.commit()
200             close_all(conn, cu)
201     else:
202         print('the [{}] is empty or equal None!'.format(sql))
203 ###############################################################
204 ####            数据库操作CRUD     END
205 ###############################################################
206 
207 
208 ###############################################################
209 ####            测试操作     START
210 ###############################################################
211 def drop_table_test():
212     '''删除数据库表测试'''
213     print('删除数据库表测试...')
214     conn = get_conn(DB_FILE_PATH)
215     drop_table(conn, TABLE_NAME)
216 
217 def create_table_test():
218     '''创建数据库表测试'''
219     print('创建数据库表测试...')
220     create_table_sql = '''CREATE TABLE `student` (
221                           `id` int(11) NOT NULL,
222                           `name` varchar(20) NOT NULL,
223                           `gender` varchar(4) DEFAULT NULL,
224                           `age` int(11) DEFAULT NULL,
225                           `address` varchar(200) DEFAULT NULL,
226                           `phone` varchar(20) DEFAULT NULL,
227                            PRIMARY KEY (`id`)
228                         )'''
229     conn = get_conn(DB_FILE_PATH)
230     create_table(conn, create_table_sql)
231 
232 def save_test():
233     '''保存数据测试...'''
234     print('保存数据测试...')
235     save_sql = '''INSERT INTO student values (?, ?, ?, ?, ?, ?)'''
236     data = [(1, 'Hongten', '', 20, '广东省广州市', '13423****62'),
237             (2, 'Tom', '', 22, '美国旧金山', '15423****63'),
238             (3, 'Jake', '', 18, '广东省广州市', '18823****87'),
239             (4, 'Cate', '', 21, '广东省广州市', '14323****32')]
240     conn = get_conn(DB_FILE_PATH)
241     save(conn, save_sql, data)
242 
243 def fetchall_test():
244     '''查询所有数据...'''
245     print('查询所有数据...')
246     fetchall_sql = '''SELECT * FROM student'''
247     conn = get_conn(DB_FILE_PATH)
248     fetchall(conn, fetchall_sql)
249 
250 def fetchone_test():
251     '''查询一条数据...'''
252     print('查询一条数据...')
253     fetchone_sql = 'SELECT * FROM student WHERE ID = ? '
254     data = 1
255     conn = get_conn(DB_FILE_PATH)
256     fetchone(conn, fetchone_sql, data)
257 
258 def update_test():
259     '''更新数据...'''
260     print('更新数据...')
261     update_sql = 'UPDATE student SET name = ? WHERE ID = ? '
262     data = [('HongtenAA', 1),
263             ('HongtenBB', 2),
264             ('HongtenCC', 3),
265             ('HongtenDD', 4)]
266     conn = get_conn(DB_FILE_PATH)
267     update(conn, update_sql, data)
268 
269 def delete_test():
270     '''删除数据...'''
271     print('删除数据...')
272     delete_sql = 'DELETE FROM student WHERE NAME = ? AND ID = ? '
273     data = [('HongtenAA', 1),
274             ('HongtenCC', 3)]
275     conn = get_conn(DB_FILE_PATH)
276     delete(conn, delete_sql, data)
277 
278 ###############################################################
279 ####            测试操作     END
280 ###############################################################
281 
282 def init():
283     '''初始化方法'''
284     #数据库文件绝句路径
285     global DB_FILE_PATH
286     DB_FILE_PATH = 'c:\\test\\hongten.db'
287     #数据库表名称
288     global TABLE_NAME
289     TABLE_NAME = 'student'
290     #是否打印sql
291     global SHOW_SQL
292     SHOW_SQL = True
293     print('show_sql : {}'.format(SHOW_SQL))
294     #如果存在数据库表,则删除表
295     drop_table_test()
296     #创建数据库表student
297     create_table_test()
298     #向数据库表中插入数据
299     save_test()
300     
301 
302 def main():
303     init()
304     fetchall_test()
305     print('#' * 50)
306     fetchone_test()
307     print('#' * 50)
308     update_test()
309     fetchall_test()
310     print('#' * 50)
311     delete_test()
312     fetchall_test()
313 
314 if __name__ == '__main__':
315     main()
复制代码

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值