python开发_sqlite3
来源:互联网 发布:java sftp 编辑:程序博客网 时间:2024/06/05 01:58
http://www.cnblogs.com/hongten/p/hongten_python_sqlite3.html
'''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 win32Type "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 win32Type "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 #### 创建|删除表操作 END114 ###############################################################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 START127 ###############################################################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 instead162 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 END205 ###############################################################206 207 208 ###############################################################209 #### 测试操作 START210 ###############################################################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 = 1255 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 #### 测试操作 END280 ###############################################################281 282 def init():283 '''初始化方法'''284 #数据库文件绝句路径285 global DB_FILE_PATH286 DB_FILE_PATH = 'c:\\test\\hongten.db'287 #数据库表名称288 global TABLE_NAME289 TABLE_NAME = 'student'290 #是否打印sql291 global SHOW_SQL292 SHOW_SQL = True293 print('show_sql : {}'.format(SHOW_SQL))294 #如果存在数据库表,则删除表295 drop_table_test()296 #创建数据库表student297 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 0
- python开发_sqlite3
- python开发_sqlite3
- Python Scrapy No module named _sqlite3
- centos6 python 安装 sqlite 解决 No module named ‘_sqlite3′
- 解决Linux安装Python相关包的_sqlite3.so及sqlite3相关问题
- python程序安装nltk-安装完成后import报ImportError: No module named '_sqlite3'解决方案
- 解决Linux安装Python相关包的_sqlite3.so及sqlite3相关问题
- No module named _sqlite3
- No module named _sqlite3
- ImportError: No module named _sqlite3
- ImportError: No module named _sqlite3
- ImportError: No module named '_sqlite3'
- iOS_数据库3_sqlite3基本操作
- 解决No module named _sqlite3的问题
- DayDayUP_Linux运维学习_sqlite3安装
- 解决“IMPORTERROR: NO MODULE NAMED _SQLITE3”问题
- 解决No module named _sqlite3的问题
- Scrapy No module named _sqlite3 错误
- 黑马程序员-多线程
- 【LeetCode】Same Tree
- hdu 1166 敌兵布阵 线段树单点更新
- mininet+FlowVisor+OpenDayLight环境搭建及实验二(完)
- 堆
- python开发_sqlite3
- Django 第三方库
- 常用命令收集
- QSqlQuery问题总结
- 基于QT Plugin框架结构
- 正则表达式语法
- 手机音视频开发APP应用
- c#学习笔记-将程序折叠为一行
- App HTML5页面 点击一次成点击两次 当慢慢的用力点下去 再抬起 就会执行一次