天天看点

python sqlite_helper.py

import utils.log    as logger
import sqlite3
 
##sys.path.append(os.path.abspath(os.path.dirname(__file__) + '/' + '..'))
##sys.path.append("..")
 
 
class SqliteHelper:
 
    def __init__(self, dbName="sqlite3.db"):
        """
        初始化连接--使用完记得关闭连接
        :param dbName: 连接库名字,注意,以'.db'结尾
        """
        self._conn = sqlite3.connect(dbName)
        self._cur = self._conn.cursor()
        self._time_now = "[" + sqlite3.datetime.datetime.now().strftime('%Y/%m/%d %H:%M:%S') + "]"
        self.log = logger.Logger('[SqliteHelper]').get_logger()
 
    def close_con(self):
        """
        关闭连接对象--主动调用
        :return:
        """
        self._cur.close()
        self._conn.close() 
 
    def exe_sql_bool(self, sql):
        """
        创建表,删除表
        :param sql:
        :return: True or False
        """
        try:
            self._cur.execute(sql)
            self._conn.commit()
            return True
        except Exception as e:
            self.log.info("执行出错:{}".format(sql), e)
            return False
  
    def exe_sql_int(self, sql, values=None):
        """
        增(多条),删,改
        :param sql:
        :param value: list:[(),()]
        :return:
        """
        try:
            if values==None:
                self._cur.execute(sql)
            else:
                self._cur.executemany(sql, values)
            self._conn.commit()
            return self._cur.rowcount
        except Exception as e:
            self.log.info("增删改出错:{}".format(sql), e)
            return -1

    def fetch_table(self, sql, limit=0):
        """
        查询所有数据
        :param sql:
        :param limit_flag: 查询条数选择,False 查询一条,True 全部查询
        :return:
        """
        try:
            self._cur.execute(sql)
            if limit!=1:
                r = self._cur.fetchall()
            else:
                r = self._cur.fetchone()
            return r
        except Exception as e:
            self.log.info("[SELECT TABLE ERROR{}]".format(sql), e)
  
class conTest:
    """测试类"""
 
    def __init__(self,file):
        self.con =sqlite3.connect(file)
        self.cur=self.con.cursor()
 
    def create_table_test(self,bm):
        sql = '''CREATE TABLE `mytest` (
                  `id` DATETIME DEFAULT NULL,
                  `user` VARCHAR(12) DEFAULT NULL,
                  `name` VARCHAR(12) DEFAULT NULL,
                  `number` VARCHAR(12) DEFAULT NULL
                )'''
        sql1 = f'PRAGMA table_info ({bm})'
        self.log.info(sql1)
        self.cur.execute(sql1)
        self.con.commit()
        value2 = self.cur.fetchall()
        if len(value2)==0:
            try:
                self.log.info(self.cur.execute(sql))
                self.con.commit()
            except:
                self.log.info("建立表出错")
        else:
            self.log.info("表已经存在")
 
    def drop_table_test(self):
        sql1="delete from mytest"
        self.cur.execute((sql1))
        self.con.commit()
        #print(self.con.drop_table("mytest"))
 
    def fetchall_table_test(self):
        sql = "SELECT * from mytest WHERE user='1003';"
        sql_all = "SELECT * from mytest;"
        print("全部记录", self.cur.execute(sql_all))
        print("全部记录", self.cur.fetchall())
        print("单条记录", self.cur.execute(sql))
        print("条件查询", self.cur.execute(sql))
 
    def delete_table_test(self):
        sql = "DELETE FROM mytest WHERE user='1003';"
        self.con.delete_table(sql)
        
 
    def update_table_test(self):
        sql_update = "UPDATE mytest SET id={0},user={1},name={2},number={3} WHERE number={4}".format(1, 1002, "'王五'",1002,1002)
        self.cur.execute(sql_update)
        self.con.commit()                                                                                            
                                                                                                   
        #print(self.con.insert_update_table(sql_update))
 
    def insert_table_test_one(self):
        sql = """INSERT INTO mytest VALUES (3, 1003, "王五", 1003);"""
        self.cur.execute((sql))
        self.con.commit()
                         
 
    def insert_table_test_many(self):
        sql = """INSERT INTO mytest VALUES (?,?,?,?) """
        value = [(2, 1004, "赵六", 1004), (4, 1005, "吴七", 1005)]
        for i in value:
            self.cur.execute(sql,i)
            self.con.commit()
##        self.con.insert_table_many(sql, value)
##        self.cur
 
    def close_con(self):
        self.con.close()
 
 
if __name__ == '__main__':
    file1="sqlite3.db"
    bm="mytest"
    contest = conTest(file1)
    contest.create_table_test(bm)
    contest.insert_table_test_many()
    contest.fetchall_table_test()
    contest.insert_table_test_one()
    contest.fetchall_table_test()
    contest.update_table_test()
    contest.drop_table_test()
    contest.close_con()