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