目录

Python数据库SQLite使用详解

一、前言:

  • 我们在上一篇讲解了python中使用数据库时涉及到的一些概念和api的介绍。
  • 本次我们将通过几个小的demo来实战演练python操作数据库的一些知识点。

二、SQLite数据库使用详解

  • SQLite是一种嵌入式数据库,它的数据库就是一个文件。由于SQLite本身是C写的,而且体积很小,所以,经常被集成到各种应用程序中,甚至在iOS和Android的App中都可以集成。
  • Python就内置了SQLite3,所以,在Python中使用SQLite,不需要安装任何东西,直接使用。

三、源码演示

  • OK,我们下看下示例代码

  • 1、我们声明一个User类。

      #声明一个User类
      class User:
      	id = 0;
      	name = "";
    
      #导入sqlite3模块
      import sqlite3
    
      #创建表
      def createTable():
      	#连接anjie.db数据库,不存在会自动创建
      	conn = sqlite3.connect('anjie.db');
      	#获取游标
      	curs = conn.cursor();
      	#执行创建表语句
      	curs.execute('''
       CREATE TABLE  IF NOT EXISTS user_table(  id VARCHAR(20) PRIMARY KEY,
        name VARCHAR(20)
       ) ''');
      	# 关闭Cursor:
        curs.close()
      	# 提交事务:
        conn.commit()
      	# 关闭Connection:
        conn.close()
    
      #插入一条数据
      def insertOneData():
      	conn = sqlite3.connect('anjie.db');
      	curs = conn.cursor();
      	u = User();
      	u.id = -1;
      	u.name = "anjie";
      	curs.execute('INSERT INTO user_table (id, name) VALUES (?, ?)', [u.id, u.name]);
      	curs.close()
      	# 通过rowcount获得插入的行数:
      	print('插入了%d 条数据' % curs.rowcount)
      	conn.commit()
      	conn.close()
    
      # 查询数据
      def selectData():
      	conn = sqlite3.connect('anjie.db');
      	curs = conn.cursor();
      	curs.execute('SELECT * FROM user_table');
      	print(curs.fetchall())
      	conn.commit()
      	conn.close()
    
      if __name__ == '__main__':
      	createTable();
      	insertOneData();
      	selectData();
    
  • 运行结果如下:

  • 插入了1 条数据
  • [(’-1’, ‘anjie’)]
  • OK,我们再编写一个插入多条数据的方法。

      def insertManyData():
      	conn = sqlite3.connect('anjie.db');
      	curs = conn.cursor();
      	u = None;
      	for i in range(10):
      		u = User();
      		u.id = i;
      		u.name = "anjie"+str(i);
      		curs.execute('INSERT INTO user_table (id, name) VALUES (?, ?)', [u.id, u.name]);
    
      	curs.close()
      	conn.commit()
      	conn.close()
    
      - OK,我们修改调用方法
    
      if __name__ == '__main__':
      	# createTable();
         # insertOneData()  
      	 insertManyData();
      	 selectData();
    
  • 结果输出为:

  • [(’-1’, ‘anjie’), (‘0’, ‘anjie0’), (‘1’, ‘anjie1’), (‘2’, ‘anjie2’), (‘3’, ‘anjie3’), (‘4’, ‘anjie4’), (‘5’, ‘anjie5’), (‘6’, ‘anjie6’), (‘7’, ‘anjie7’), (‘8’, ‘anjie8’), (‘9’, ‘anjie9’)]
  • 其插入了10条数据,从0到9。

  • OK,通过这些数据我们再单独看三个方法fetchone、fetchmany、fetchall

      if __name__ == '__main__':
      	# createTable();
         # insertOneData() 
         # insertManyData(); 
         # selectData();
      	conn = sqlite3.connect('anjie.db');
      	curs = conn.cursor();
      	curs.execute('SELECT * FROM user_table');
      	print(curs.fetchone())
      	print(curs.fetchmany())
      	print(curs.fetchmany(size=2))
      	curs.arraysize=1
      	print(curs.fetchmany())
      	print(curs.fetchall())
      	conn.commit()
      	conn.close()
    
  • 输出结果为:

  • (’-1’, ‘anjie’) [(‘0’, ‘anjie0’)] [(‘1’, ‘anjie1’), (‘2’, ‘anjie2’)] [(‘3’, ‘anjie3’)] [(‘4’, ‘anjie4’), (‘5’, ‘anjie5’), (‘6’, ‘anjie6’), (‘7’, ‘anjie7’), (‘8’, ‘anjie8’), (‘9’, ‘anjie9’)]
  • 从结果我们可以看到

  • fetchone获取第一条数据,

  • fetchmany获取多条,通过size指定,不指定默认为1,也可以通过arraysize指定

  • fetchall获取剩余所有的数据。

  • 要注意一点:curs里面的数据及为查询到的数据,取出一条,里面就会少一条,所以如果你第一个就调用fetchall,那么后面取的都是[]空集合了。

四、总结

  • OK,通过前面的学习,相信大家已经基本掌握了python 操作SQLite的基本步骤,其他数据库也基本类型,剩下就更多是对SQL语句的学习了。