python操作SQLIte数据库

一、SQLite

         SQLite是一款轻量级的关系型数据库,是遵守ACID的关系型数据库管理系统,它的设计目标是嵌入式的,而且已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,还有ODBC接口,同样比起Mysql、PostgreSQL这两款开源的世界著名数据库管理系统来讲,它的处理速度比他们都快。SQLite 3目前已经发布,是目前SQLite最新的版本。

二、SQLite3的软件包安装

以Anaconda下距离,若想使用SQLite,需要通过pip对sqlite3进行安装,命令行格式为:

pip install sqlite3

在安装成功后,便可通过import  sqlite3进行引用

import sqlite3

三、SQLite3的使用

        为了使得代码更加方便调用,在代码中定义了SQL_module类别,从而方便代码的迁移

1.类的初始化

        为了使得数据可以存储,需要设数据库存储的路径以及名称,期命名格式为:路径/XXX.db其中XXX为设置的名称,而后在SQL_module实例化时,名称路径

def __init__(self, path):
    self.path = path

2.数据库的创建

        设定完路径后,对数据库进行创建,并设定的文件是否为可读写状态,并设置从传入定义的表的名称、以及须定义的数据类型以及名称,具体定义方式参见数据库创建的命令行方法,并对照下述代码将对应的数据传入,或参照文章最后一部分综合代码所定义的格式。

def create(self, table, data_string):
    f = open(self.path, "w")
    f.close()
    self.Connect()
    self.query.execute("CREATE TABLE IF NOT EXISTS {} {};".format(table, data_string))
    self.sql.commit()

 3.数据的更删查改操作

        为了方便大家进行操作,在代码中,我们对其进行了封装,方便大家操作,其中table为定义的表名,ID为对应的ID名称,ID_data为ID号或者称其为行号,col_name为对应的列名, col_data为要跟新的数据

a.数据更新

def update_data(self, table, ID, ID_data, col_name, col_data):
    self.query.execute("UPDATE {} SET {}={} WHERE {}={}".format(table, col_name, col_data,     
                       ID, ID_data))
    self.sql.commit()

b.数据的删除

def delete_data(self, table, ID, ID_data):
    self.query.execute("DELETE FROM {} WHERE {}={}".format(table, ID, ID_data))
    self.sql.commit()

c.数据的插入

         其中string为要插入数据的名称,具体命名格式参照注释介绍

def Insert_data(self, table, string, data):
    # insert_sql = "insert into _test_ (name,city) values (?,?)"  #?为占位符
    # execute(insert_sql,('Tom','New York'))

    # "insert into _test_ ('{}') values ('{}')".format(cname , strl[i])

    # sql = ''' insert into students (name, username, id) values (:st_name:st_username,:id_num)'''
    # execute(sql,{'st_name':name, 'st_username':username, 'id_num':id_num})
    self.query.execute("insert into {} {} values {}".format(table, string, data))
    self.sql.commit()

d.数据的查找

        此处查找必须使用ID号进行查找,date_name为定义的ID名称,data为定义的ID号。

def find(self, table, data_name, data):
    list = self.query.execute("SELECT * from {} WHERE {}={}".format(table, data_name,data))
    list = list.fetchall()
    return list[0]

四、其他操作

1.表的复位

        为了防止运行过程中数据库出现异常情况,因此,此处提供了复位接口,从而解决出现的异常情况

def Reset(self, table):
    # self.query.execute("DROP TABLE %s" % table)
    self.query.execute("DROP TABLE {}".format(table))
    self.sql.commit()

 2.重命名表名

def Rename(self,table, new_table):
    self.query.execute("alter table {} rename to {};".format(table, new_table))
    self.sql.commit()

3. 使用命令行操作

        为了方便使用代码中未定义的命令行方法。,此处,定义了数据库命令行操作的接口,方便进行其他操作

def self_CMD(self, string):
    self.query.execute(string)
    self.sql.commit()

 4.数据库的连接与断开

断开操作

def disconnect(self):
    self.query.close()

连接操作

def Connect(self):
    self.sql = sqlite3.connect(self.path)
    self.query = self.sql.cursor()

 五、代码综合

import sqlite3


class SQL_module():
    def __init__(self, path):
        self.path = path

    def create(self, table, data_string):
        f = open(self.path, "w")
        f.close()
        self.Connect()
        self.query.execute("CREATE TABLE IF NOT EXISTS {} {};".format(table, data_string))
        self.sql.commit()

    def update_data(self, table, ID, ID_data, col_name, col_data):
        self.query.execute("UPDATE {} SET {}={} WHERE {}={}".format(table, col_name, col_data, ID, ID_data))
        self.sql.commit()

    def delete_data(self, table, ID, ID_data):
        self.query.execute("DELETE FROM {} WHERE {}={}".format(table, ID, ID_data))
        self.sql.commit()

    def Insert_data(self, table, string, data):
        # insert_sql = "insert into _test_ (name,city) values (?,?)"  #?为占位符
        # execute(insert_sql,('Tom','New York'))

        # "insert into _test_ ('{}') values ('{}')".format(cname , strl[i])

        # sql = ''' insert into students (name, username, id) values (:st_name, :st_username, :id_num)'''
        # execute(sql,{'st_name':name, 'st_username':username, 'id_num':id_num})
        self.query.execute("insert into {} {} values {}".format(table, string, data))
        self.sql.commit()

    def Reset(self, table):
        # self.query.execute("DROP TABLE %s" % table)
        self.query.execute("DROP TABLE {}".format(table))
        self.sql.commit()

    def Rename(self,table, new_table):
        self.query.execute("alter table {} rename to {};".format(table, new_table))
        self.sql.commit()

    def self_CMD(self, string):
        self.query.execute(string)
        self.sql.commit()

    def find(self, table, data_name, data):
        list = self.query.execute("SELECT * from {} WHERE {}={}".format(table, data_name, data))
        list = list.fetchall()
        return list[0]

    def disconnect(self):
        self.query.close()

    def Connect(self):
        self.sql = sqlite3.connect(self.path)
        self.query = self.sql.cursor()

六、测试代码 

if __name__ == "__main__":
    SQL = SQL_module("./test.db")
    table = "table1"
    SQL.create(table, "(ID INT PRIMARY KEY,NAME TEXT,AGE INT,ADDRESS CHAR(50),SALARY REAL)")
    SQL.Insert_data(table, "(ID,NAME,AGE,ADDRESS,SALARY)", "(1, 'Paul', 32, 'California', 20000.00 )")
    SQL.Insert_data(table, "(ID,NAME,AGE,ADDRESS,SALARY)", "(2, 'Allen', 25, 'Texas', 15000.00)")
    SQL.Insert_data(table, "(ID,NAME,AGE,ADDRESS,SALARY)", "(3, 'Teddy', 23, 'Norway', 20000.00)")
    # 此处查找必须使用ID
    data = SQL.find(table, "ID", 1)
    print(data[1])
    SQL.update_data(table, "ID", 2, "(ID,NAME,AGE,ADDRESS,SALARY)", (2, 'XiaoMing', 25, 'Texas', 15000.00))
    SQL.delete_data(table, "ID", 3)
    new_table = "table2"
    SQL.Rename(table, new_table)

 

你可能感兴趣的:(SQLite,python,sqlite)