python3与sqlite3

来源:互联网 发布:mac上好玩的单机小游戏 编辑:程序博客网 时间:2024/05/20 07:53
原文地址

来源:http://www.cnblogs.com/hongten/p/hongten_python_sqlite3.html

[html] view plain copy
print?在CODE上查看代码片派生到我的代码片
  1. <span style="font-family: Arial, Helvetica, sans-serif;">'''SQLite数据库是一款非常小巧的嵌入式开源数据库软件,也就是说</span>  
[html] view plain copy
print?在CODE上查看代码片派生到我的代码片
  1. 没有独立的维护进程,所有的维护都来自于程序本身。  
  2. 在python中,使用sqlite3创建数据库的连接,当我们指定的数据库文件不存在的时候  
  3. 连接对象会自动创建数据库文件;如果数据库文件已经存在,则连接对象不会再创建  
  4. 数据库文件,而是直接打开该数据库文件。  
  5.     连接对象可以是硬盘上面的数据库文件,也可以是建立在内存中的,在内存中的数据库  
  6.     执行完任何操作后,都不需要提交事务的(commit)  
  7.   
  8.     创建在硬盘上面: conn = sqlite3.connect('c:\\test\\test.db')  
  9.     创建在内存上面: conn = sqlite3.connect('"memory:')  
  10.   
  11.     下面我们一硬盘上面创建数据库文件为例来具体说明:  
  12.     conn = sqlite3.connect('c:\\test\\hongten.db')  
  13.     其中conn对象是数据库链接对象,而对于数据库链接对象来说,具有以下操作:  
  14.   
  15.         commit()            --事务提交  
  16.         rollback()          --事务回滚  
  17.         close()             --关闭一个数据库链接  
  18.         cursor()            --创建一个游标  
  19.   
  20.     cu = conn.cursor()  
  21.     这样我们就创建了一个游标对象:cu  
  22.     在sqlite3中,所有sql语句的执行都要在游标对象的参与下完成  
  23.     对于游标对象cu,具有以下具体操作:  
  24.   
  25.         execute()           --执行一条sql语句  
  26.         executemany()       --执行多条sql语句  
  27.         close()             --游标关闭  
  28.         fetchone()          --从结果中取出一条记录  
  29.         fetchmany()         --从结果中取出多条记录  
  30.         fetchall()          --从结果中取出所有记录  
  31.         scroll()            --游标滚动  
  32.   
  33. '''  




[html] view plain copy
print?在CODE上查看代码片派生到我的代码片
  1. Python 3.3.2 (v3.3.2:d047928ae3f6, May 16 2013, 00:03:43) [MSC v.1600 32 bit (Intel)] on win32  
  2. Type "copyright", "credits" or "license()" for more information.  
  3. >>> ================================ RESTART ================================  
  4. >>>   
  5. show_sql : False  
  6. 删除数据库表测试...  
  7. 硬盘上面:[c:\test\hongten.db]  
  8. 删除数据库表[student]成功!  
  9. 创建数据库表测试...  
  10. 硬盘上面:[c:\test\hongten.db]  
  11. 创建数据库表[student]成功!  
  12. 保存数据测试...  
  13. 硬盘上面:[c:\test\hongten.db]  
  14. 查询所有数据...  
  15. 硬盘上面:[c:\test\hongten.db]  
  16. (1, 'Hongten', '男', 20, '广东省广州市', '13423****62')  
  17. (2, 'Tom', '男', 22, '美国旧金山', '15423****63')  
  18. (3, 'Jake', '女', 18, '广东省广州市', '18823****87')  
  19. (4, 'Cate', '女', 21, '广东省广州市', '14323****32')  
  20. ##################################################  
  21. 查询一条数据...  
  22. 硬盘上面:[c:\test\hongten.db]  
  23. (1, 'Hongten', '男', 20, '广东省广州市', '13423****62')  
  24. ##################################################  
  25. 更新数据...  
  26. 硬盘上面:[c:\test\hongten.db]  
  27. 查询所有数据...  
  28. 硬盘上面:[c:\test\hongten.db]  
  29. (1, 'HongtenAA', '男', 20, '广东省广州市', '13423****62')  
  30. (2, 'HongtenBB', '男', 22, '美国旧金山', '15423****63')  
  31. (3, 'HongtenCC', '女', 18, '广东省广州市', '18823****87')  
  32. (4, 'HongtenDD', '女', 21, '广东省广州市', '14323****32')  
  33. ##################################################  
  34. 删除数据...  
  35. 硬盘上面:[c:\test\hongten.db]  
  36. 查询所有数据...  
  37. 硬盘上面:[c:\test\hongten.db]  
  38. (2, 'HongtenBB', '男', 22, '美国旧金山', '15423****63')  
  39. (4, 'HongtenDD', '女', 21, '广东省广州市', '14323****32')  
  40. >>>  



[html] view plain copy
print?在CODE上查看代码片派生到我的代码片
  1. Python 3.3.2 (v3.3.2:d047928ae3f6, May 16 2013, 00:03:43) [MSC v.1600 32 bit (Intel)] on win32  
  2. Type "copyright", "credits" or "license()" for more information.  
  3. >>> ================================ RESTART ================================  
  4. >>>   
  5. show_sql : True  
  6. 删除数据库表测试...  
  7. 硬盘上面:[c:\test\hongten.db]  
  8. 执行sql:[DROP TABLE IF EXISTS student]  
  9. 删除数据库表[student]成功!  
  10. 创建数据库表测试...  
  11. 硬盘上面:[c:\test\hongten.db]  
  12. 执行sql:[CREATE TABLE `student` (  
  13.                           `id` int(11) NOT NULL,  
  14.                           `name` varchar(20) NOT NULL,  
  15.                           `gender` varchar(4) DEFAULT NULL,  
  16.                           `age` int(11) DEFAULT NULL,  
  17.                           `address` varchar(200) DEFAULT NULL,  
  18.                           `phone` varchar(20) DEFAULT NULL,  
  19.                            PRIMARY KEY (`id`)  
  20.                         )]  
  21. 创建数据库表[student]成功!  
  22. 保存数据测试...  
  23. 硬盘上面:[c:\test\hongten.db]  
  24. 执行sql:[INSERT INTO student values (?, ?, ?, ?, ?, ?)],参数:[(1, 'Hongten', '男', 20, '广东省广州市', '13423****62')]  
  25. 执行sql:[INSERT INTO student values (?, ?, ?, ?, ?, ?)],参数:[(2, 'Tom', '男', 22, '美国旧金山', '15423****63')]  
  26. 执行sql:[INSERT INTO student values (?, ?, ?, ?, ?, ?)],参数:[(3, 'Jake', '女', 18, '广东省广州市', '18823****87')]  
  27. 执行sql:[INSERT INTO student values (?, ?, ?, ?, ?, ?)],参数:[(4, 'Cate', '女', 21, '广东省广州市', '14323****32')]  
  28. 查询所有数据...  
  29. 硬盘上面:[c:\test\hongten.db]  
  30. 执行sql:[SELECT * FROM student]  
  31. (1, 'Hongten', '男', 20, '广东省广州市', '13423****62')  
  32. (2, 'Tom', '男', 22, '美国旧金山', '15423****63')  
  33. (3, 'Jake', '女', 18, '广东省广州市', '18823****87')  
  34. (4, 'Cate', '女', 21, '广东省广州市', '14323****32')  
  35. ##################################################  
  36. 查询一条数据...  
  37. 硬盘上面:[c:\test\hongten.db]  
  38. 执行sql:[SELECT * FROM student WHERE ID = ? ],参数:[1]  
  39. (1, 'Hongten', '男', 20, '广东省广州市', '13423****62')  
  40. ##################################################  
  41. 更新数据...  
  42. 硬盘上面:[c:\test\hongten.db]  
  43. 执行sql:[UPDATE student SET name = ? WHERE ID = ? ],参数:[('HongtenAA', 1)]  
  44. 执行sql:[UPDATE student SET name = ? WHERE ID = ? ],参数:[('HongtenBB', 2)]  
  45. 执行sql:[UPDATE student SET name = ? WHERE ID = ? ],参数:[('HongtenCC', 3)]  
  46. 执行sql:[UPDATE student SET name = ? WHERE ID = ? ],参数:[('HongtenDD', 4)]  
  47. 查询所有数据...  
  48. 硬盘上面:[c:\test\hongten.db]  
  49. 执行sql:[SELECT * FROM student]  
  50. (1, 'HongtenAA', '男', 20, '广东省广州市', '13423****62')  
  51. (2, 'HongtenBB', '男', 22, '美国旧金山', '15423****63')  
  52. (3, 'HongtenCC', '女', 18, '广东省广州市', '18823****87')  
  53. (4, 'HongtenDD', '女', 21, '广东省广州市', '14323****32')  
  54. ##################################################  
  55. 删除数据...  
  56. 硬盘上面:[c:\test\hongten.db]  
  57. 执行sql:[DELETE FROM student WHERE NAME = ? AND ID = ? ],参数:[('HongtenAA', 1)]  
  58. 执行sql:[DELETE FROM student WHERE NAME = ? AND ID = ? ],参数:[('HongtenCC', 3)]  
  59. 查询所有数据...  
  60. 硬盘上面:[c:\test\hongten.db]  
  61. 执行sql:[SELECT * FROM student]  
  62. (2, 'HongtenBB', '男', 22, '美国旧金山', '15423****63')  
  63. (4, 'HongtenDD', '女', 21, '广东省广州市', '14323****32')  
  64. >>>  




[html] view plain copy
print?在CODE上查看代码片派生到我的代码片
  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()  
原创粉丝点击