zoukankan      html  css  js  c++  java
  • python 操作sqlite数据库

    '''SQLite数据库是一款非常小巧的嵌入式开源数据库软件,也就是说
    没有独立的维护进程,所有的维护都来自于程序本身。
    在python中,使用sqlite3创建数据库的连接,当我们指定的数据库文件不存在的时候
    连接对象会自动创建数据库文件;如果数据库文件已经存在,则连接对象不会再创建
    数据库文件,而是直接打开该数据库文件。
    连接对象可以是硬盘上面的数据库文件,也可以是建立在内存中的,在内存中的数据库
    执行完任何操作后,都不需要提交事务的(commit)

    创建在硬盘上面: conn = sqlite3.connect('e:\test.db')
    创建在内存上面: conn = sqlite3.connect('memory:')

    下面我们一硬盘上面创建数据库文件为例来具体说明:
    conn = sqlite3.connect('e:\test.db')
    其中conn对象是数据库链接对象,而对于数据库链接对象来说,具有以下操作:

    commit() --事务提交
    rollback() --事务回滚
    close() --关闭一个数据库链接
    cursor() --创建一个游标

    cu = conn.cursor()
    这样我们就创建了一个游标对象:cu
    在sqlite3中,所有sql语句的执行都要在游标对象的参与下完成
    对于游标对象cu,具有以下具体操作:

    execute() --执行一条sql语句
    executemany() --执行多条sql语句
    close() --游标关闭
    fetchone() --从结果中取出一条记录
    fetchmany() --从结果中取出多条记录
    fetchall() --从结果中取出所有记录
    scroll() --游标滚动

    '''

    # -*- coding: utf-8 -*-
    import sqlite3
    import os

    class SqliteDB:

      #是否打印sql
      print_sql = True

      #数据库连接
      sqlite_Conn = None
      def __init__(self,dbFile_path):
        '''初始化数据库文件路径'''
        filepath = unicode(dbFile_path,'utf8')
        self.sqlite_Conn = self.get_Conn(filepath)


      def get_Conn(self,dbFile_path):
        '''获取到数据库的连接对象,参数为数据库文件的绝对路径
        如果传递的参数是存在,并且是文件,那么就返回硬盘上面改
        路径下的数据库文件的连接对象;否则,返回内存中的数据接
        连接对象'''
        if os.path.exists(dbFile_path) and os.path.isfile(dbFile_path):
          print('硬盘上面:[{}]'.format(dbFile_path))
          return sqlite3.connect(dbFile_path)
        else:
          print('内存上面:[:memory:]')
          return sqlite3.connect(':memory:')

      def commit(self):
        '''提交数据库事务'''
        if self.sqlite_Conn is not None:
          self.sqlite_Conn.commit()

      def get_Cursor(self):
        '''
         该方法是获取数据库的游标对象,参数为数据库的连接对象
         如果数据库的连接对象不为None,则返回数据库连接对象所创
        建的游标对象;否则返回一个游标对象,该对象是内存中数据
        库连接对象所创建的游标对象
        '''
        if self.sqlite_Conn is not None:
          return self.sqlite_Conn.cursor()
        else:
          return self.sqlite_Conn.cursor()

      def close_Cursor(self,cursor):
        '''关闭数据库游标对象和数据库连接对象'''
        try:
          if cursor is not None:
          cursor.close()
        finally:
          if cursor is not None:
            cursor.close()

    ################################################################
    #创建表,删除表操作
    ################################################################
      def create_Table(self, strSql):
        '''创建数据库表:'''
        if strSql is not None and strSql != '':
          cursor = self.get_Cursor()
          if self.print_sql:
            print('执行sql:[{}]'.format(strSql))
          cursor.execute(strSql)
          self.commit()
          print('创建数据库表成功!')
          self.close_Cursor(cursor)
        else:
          print('the [{}] is empty or equal None!'.format(strSql))


      def drop_Table(self,table):
        '''如果表存在,则删除表,如果表中存在数据的时候,使用该
        方法的时候要慎用!'''
        if table is not None and table != '':
          strSql = 'DROP TABLE IF EXISTS ' + table
          if self.print_sql:
            print('执行sql:[{}]'.format(strSql))
          cursor = self.get_Cursor()
          cursor.execute(strSql)
          self.commit()
          print('删除数据库表[{}]成功!'.format(table))
          self.close_Cursor(cursor)
        else:
          print('the [{}] is empty or equal None!'.format(strSql))

    #####################################################################

    #数据库操作
    #####################################################################
      def insert_MultiData(self,strSql, data):
        '''插入数据'''
        if strSql is not None and strSql != '':
           if data is not None:
            cursor = self.get_Cursor()
            for d in data:
              if self.print_sql:
                print('执行sql:[{}],参数:[{}]'.format(strSql, d))
              cursor.execute(strSql, d)
              self.commit()
            self.close_Cursor(cursor)
        else:
          print('the [{}] is empty or equal None!'.format(strSql))

      def insert_Data(self,strSql):
        '''插入数据'''
        if strSql is not None and strSql != '':
          cursor = self.get_Cursor()
          print('执行sql:[{}]'.format(strSql))
          cursor.execute(strSql)
          self.commit()
          self.close_Cursor(cursor)

        else:
          print('the [{}] is empty or equal None!'.format(strSql))

      def get_All_Item(self,strSql):
        '''查询所有数据'''
        if strSql is not None and strSql != '':
          cursor = self.get_Cursor()
          if self.print_sql:
            print('执行sql:[{}]'.format(strSql))
          cursor.execute(strSql)
          listR = cursor.fetchall()

          self.close_Cursor(cursor)
          return listR

        else:
          print('the [{}] is empty or equal None!'.format(strSql))
          return None

      def get_One_Item(self,strSql, data):
        '''查询一条数据'''
        if strSql is not None and strSql != '':
          if data is not None:
          #Do this instead
          d = (data,)
          cursor = self.get_Cursor()
          if self.print_sql:
            print('执行sql:[{}],参数:[{}]'.format(strSql, data))
          cursor.execute(strSql, d)
          r = cursor.fetchall()
          if len(r) > 0:
            for e in range(len(r)):
              print(r[e])
          else:
            print('the [{}] equal None!'.format(data))
        else:
          print('the [{}] is empty or equal None!'.format(strSql))

      def update_Data(self,strSql, data):
        '''更新数据'''
        if strSql is not None and strSql != '':
          if data is not None:
            cursor = self.get_Cursor()
            for d in data:
              if self.print_sql:
                print('执行sql:[{}],参数:[{}]'.format(strSql, d))
              cursor.execute(strSql, d)
              self.commit()
            self.close_Cursor(cursor)
          else:
            print('the [{}] is empty or equal None!'.format(strSql))

      def delete_multiData(self,strSql, data):
        '''删除多条sql数据'''
        if strSql is not None and strSql != '':
          if data is not None:
            cursor = self.get_Cursor()
            for d in data:
              if self.print_sql:
                print('执行sql:[{}],参数:[{}]'.format(strSql, d))
              cursor.execute(strSql, d)
              self.commit()
            self.close_Cursor(cursor)
        else:
          print('the [{}] is empty or equal None!'.format(strSql))

      def delete_Data(self,strSql):
        '''删除一条sql数据'''
        if strSql is not None and strSql != '':
          if self.print_sql:
            print('执行sql:[{}]'.format(strSql))
          cursor = self.get_Cursor()
          cursor.execute(strSql)
          self.commit()
          self.close_Cursor(cursor)
        else:
          print('the [{}] is empty or equal None!'.format(strSql))

    #########################################################################
    #测试代码
    #########################################################################

    db = SqliteDB('e:\test.db')

    #删除数据表
    db.drop_Table('person')

    #创建数据库表
    create_table_sql = '''CREATE TABLE `person` (
    `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,
    PRIMARY KEY (`id`)
    )'''

    db.create_Table(create_table_sql)

    #删除数据、
    delSql='delete from person '
    db.delete_Data(delSql)

    #插入数据测试,插入一条语句
    insert_sql ='''INSERT INTO person VALUES (3, 'xiaoli', '女', 18, '山东')'''
    db.insert_Data(insert_sql)

    #插入数据测试,插入多条语句

    insert_sql = '''INSERT INTO person values (?, ?, ?, ?, ?)'''
    '''
    data = [[1, 'xiaowang', u'男', 20, u'广东'],
    [2, 'xiaozhang', u'男', 22, u'河南'],
    [3, 'xiaoli', u'男', 18, u'山东'],
    [4, 'xiaoliu', u'女', 21, u'山西']]
    '''

    data = [[1, 'xiaowang', '男', 20, '广东'],
    [2, 'xiaozhang', '男', 22, '河南'],
    [3, 'xiaoli', '男', 18, '山东'],
    [4, 'xiaoliu', '女', 21, '山西']]


    for item in data:
    item[2] = unicode(item[2],'utf8')
    item[4] = unicode(item[4],'utf8')

    db.insert_MultiData(insert_sql,data)

    #查询数据
    print db.get_All_Item('select * from person')

  • 相关阅读:
    Data Base mysql备份与恢复
    java 乱码问题解决方案
    【知识强化】第二章 物理层 2.1 通信基础
    【知识强化】第二章 进程管理 2.2 处理机调度
    【知识强化】第二章 进程管理 2.1 进程与线程
    【知识强化】第一章 操作系统概述 1.3 操作系统的运行环境
    【知识强化】第一章 网络体系结构 1.1 数据结构的基本概念
    【知识强化】第一章 网络体系结构 1.2 计算机网络体系结构与参考模型
    【知识强化】第一章 网络体系结构 1.1 计算机网络概述
    【知识强化】第一章 操作系统概述 1.1 操作系统的基本概念
  • 原文地址:https://www.cnblogs.com/shaosks/p/5639915.html
Copyright © 2011-2022 走看看