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

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 importsqlite313 importos14 '''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 这样我们就创建了一个游标对象:cu36 在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 =True56

57 defget_conn(path):58 '''获取到数据库的连接对象,参数为数据库文件的绝对路径59 如果传递的参数是存在,并且是文件,那么就返回硬盘上面改60 路径下的数据库文件的连接对象;否则,返回内存中的数据接61 连接对象'''

62 conn =sqlite3.connect(path)63 if os.path.exists(path) andos.path.isfile(path):64 print('硬盘上面:[{}]'.format(path))65 returnconn66 else:67 conn =None68 print('内存上面:[:memory:]')69 return sqlite3.connect(':memory:')70

71 defget_cursor(conn):72 '''该方法是获取数据库的游标对象,参数为数据库的连接对象73 如果数据库的连接对象不为None,则返回数据库连接对象所创74 建的游标对象;否则返回一个游标对象,该对象是内存中数据75 库连接对象所创建的游标对象'''

76 if conn is notNone:77 returnconn.cursor()78 else:79 return get_conn('').cursor()80

81 ###############################################################

82 #### 创建|删除表操作 START

83 ###############################################################

84 defdrop_table(conn, table):85 '''如果表存在,则删除表,如果表中存在数据的时候,使用该86 方法的时候要慎用!'''

87 if table is not None and table != '':88 sql = 'DROP TABLE IF EXISTS' +table89 ifSHOW_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 defcreate_table(conn, sql):100 '''创建数据库表:student'''

101 if sql is not None and sql != '':102 cu =get_cursor(conn)103 ifSHOW_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 defclose_all(conn, cu):117 '''关闭数据库游标对象和数据库连接对象'''

118 try:119 if cu is notNone:120 cu.close()121 finally:122 if cu is notNone:123 cu.close()124

125 ###############################################################

126 #### 数据库操作CRUD START

127 ###############################################################

128

129 defsave(conn, sql, data):130 '''插入数据'''

131 if sql is not None and sql != '':132 if data is notNone:133 cu =get_cursor(conn)134 for d indata:135 ifSHOW_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 deffetchall(conn, sql):144 '''查询所有数据'''

145 if sql is not None and sql != '':146 cu =get_cursor(conn)147 ifSHOW_SQL:148 print('执行sql:[{}]'.format(sql))149 cu.execute(sql)150 r =cu.fetchall()151 if len(r) >0:152 for e inrange(len(r)):153 print(r[e])154 else:155 print('the [{}] is empty or equal None!'.format(sql))156

157 deffetchone(conn, sql, data):158 '''查询一条数据'''

159 if sql is not None and sql != '':160 if data is notNone:161 #Do this instead

162 d =(data,)163 cu =get_cursor(conn)164 ifSHOW_SQL:165 print('执行sql:[{}],参数:[{}]'.format(sql, data))166 cu.execute(sql, d)167 r =cu.fetchall()168 if len(r) >0:169 for e inrange(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 defupdate(conn, sql, data):177 '''更新数据'''

178 if sql is not None and sql != '':179 if data is notNone:180 cu =get_cursor(conn)181 for d indata:182 ifSHOW_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 defdelete(conn, sql, data):191 '''删除数据'''

192 if sql is not None and sql != '':193 if data is notNone:194 cu =get_cursor(conn)195 for d indata:196 ifSHOW_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 defdrop_table_test():212 '''删除数据库表测试'''

213 print('删除数据库表测试...')214 conn =get_conn(DB_FILE_PATH)215 drop_table(conn, TABLE_NAME)216

217 defcreate_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 defsave_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 deffetchall_test():244 '''查询所有数据...'''

245 print('查询所有数据...')246 fetchall_sql = '''SELECT * FROM student'''

247 conn =get_conn(DB_FILE_PATH)248 fetchall(conn, fetchall_sql)249

250 deffetchone_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 defupdate_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 defdelete_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 definit():283 '''初始化方法'''

284 #数据库文件绝句路径

285 globalDB_FILE_PATH286 DB_FILE_PATH = 'c:\\test\\hongten.db'

287 #数据库表名称

288 globalTABLE_NAME289 TABLE_NAME = 'student'

290 #是否打印sql

291 globalSHOW_SQL292 SHOW_SQL =True293 print('show_sql : {}'.format(SHOW_SQL))294 #如果存在数据库表,则删除表

295 drop_table_test()296 #创建数据库表student

297 create_table_test()298 #向数据库表中插入数据

299 save_test()300

301

302 defmain():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
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值