Python3 读sqlite数据库

sqlite3_reader.py

这个类主要是读取图层字段信息
import sqlite3
import reclass Sqlite3FieldInfo:#目前无法确定sqlite3数据库字段长度的获取有没有问题def __init__(self):self.__fieldName = ''self.__fieldType = ''self.__fieldIndex = 0self.__fieldLength = 0@propertydef fieldName(self):return self.__fieldName@fieldName.setterdef fieldName(self, fieldName):self.__fieldName = fieldName@propertydef fieldType(self):return self.__fieldType@fieldType.setterdef fieldType(self, fieldType):self.__fieldType = fieldType@propertydef fieldIndex(self):return self.__fieldIndex@fieldIndex.setterdef fieldIndex(self, index):self.__fieldIndex = index@propertydef fieldLength(self):return self.__fieldLength@fieldLength.setterdef fieldLength(self, length):self.__fieldLength = lengthdef toList(self):return [self.fieldName, self.fieldType, self.fieldIndex, self.fieldLength]class Sqlite3Reader:def __init__(self, *args, **kwargs):self.__databaseConnector = Nonesuper(Sqlite3Reader, self).__init__(*args, **kwargs)##property装饰器只是getter的标签,只是说明self.config_connector就是从这个函数获取而已,只是效果和我们的getter一样##从@property的装饰器衍生出另外一个@Property.setter,同理,只是效果和我们的setter保持一致##这里还需要注意的一点就是,@property修饰的函数,无论是getter,setter,都必须保证函数名称一致,但是参数可以不一致@propertydef databaseConnector(self):return self.__databaseConnectordef connectDatabase(self, path):self.__databaseConnector = sqlite3.connect(path)def getAllTableNames(self):tableNameList = []if not self.databaseConnector:return tableNameListgetAllTablesSQLString = "select name from sqlite_master where type='table' order by name"databaseConnectorCursor = self.databaseConnector.cursor()databaseConnectorCursor.execute(getAllTablesSQLString)for items in databaseConnectorCursor.fetchall():tableNameList.append(items[0])return tableNameList#利用生成器不断迭代取出下一个fieldInfo,以简化代码,毕竟**一个函数只能做一件事**#但是这里我觉得很奇怪.又一个生成器我是这样写的,但是每次准报错,我不知道为何只能把list放到闭包内才能够顺利执行,期待下次我找到原因:# def __getSqlite3FieldInfoByList(self, fieldInfoRawData):
#         for fieldInfoItem in fieldInfoRawData:
#             fieldInfo = Sqlite3FieldInfo()
#             fieldInfo.fieldIndex = fieldInfoItem[0]
#             fieldInfo.fieldName = fieldInfoItem[1]
#             fieldInfo.fieldType = fieldInfoItem[2]
#             #fieldInfo.fieldLength = fieldInfoItem[3]
#             yield fieldInfodef __fieldInfoGenerator(self, fieldInfoRawData):def getSqlite3FieldInfoByList():for fieldInfoItem in fieldInfoRawData:fieldInfo = Sqlite3FieldInfo()fieldInfo.fieldIndex = fieldInfoItem[0]fieldInfo.fieldName = fieldInfoItem[1]fieldInfo.fieldType = fieldInfoItem[2]#fieldInfo.fieldLength = fieldInfoItem[3]yield fieldInforeturn getSqlite3FieldInfoByListdef __getTableFieldsInfoByTableNameHelper(self,fieldsInfoRawData,fieldInfoList):for fieldInfo in self.__fieldInfoGenerator(fieldsInfoRawData)():fieldInfoList.append(fieldInfo)def getTableFieldsInfoByTableName(self, tableName):fieldsInfoList = []getTableDescribeStr = "PRAGMA table_info('" + tableName + "')"databaseConnectorCursor = self.databaseConnector.cursor()databaseConnectorCursor.execute(getTableDescribeStr)fieldInfosRawData = databaseConnectorCursor.fetchall()#利用生成器将代码简化.self.__getTableFieldsInfoByTableNameHelper(fieldInfosRawData,fieldsInfoList)return fieldsInfoListdef getTableContentByTableName(self, tableName):getTableContentStr = "select * from " + tableNamedatabaseConnectorCursor = self.databaseConnector.cursor()databaseConnectorCursor.execute(getTableContentStr)return databaseConnectorCursor.fetchall()'''
if __name__ == '__main__':databaseReader = Sqlite3Reader()databaseReader.connectDatabase('config.cfg')tableNameList = databaseReader.getAllTableNames()#print(tableNameList)for item in tableNameList:print(item)fieldInfoList = databaseReader.getTableDescribeByTableName(item)for fieldInfo in fieldInfoList:print(fieldInfo.fieldName, fieldInfo.fieldType,fieldInfo.fieldIndex, fieldInfo.fieldLength)print('*****************************************************************************')
'''

confige_info.py

这个主要是读取数据库内容的类,以后会再次修改
import sqlite3_readerclass ConfigInfo:def __init__(self,path):self.__configReader = Noneself.__resultFile = open(path,'w',encoding='utf-8')@propertydef resultFile(self):return self.__resultFile@propertydef configReader(self):return self.__configReaderdef __initConfigReader(self,path):self.__configReader = sqlite3_reader.Sqlite3Reader()self.__configReader.connectDatabase(path)def closeResultFiles(self):if self.__resultFile:self.__resultFile.close()#如果要使用生成器的话,记得加上括号:self.__nextTableName()才是生成器,才能被迭代,也就是for tablename in self.__nextTableName()def __nextTableName(self):for tableName in self.configReader.getAllTableNames():yield tableNamedef tableInfo(self,tableName):return self.configReader.getTableFieldsInfoByTableName(tableName)def tableContent(self,tableName):return self.configReader.getTableContentByTableName(tableName)def readConfig(self,path):self.__initConfigReader(path)for tableName in self.__nextTableName():print(self.tableInfo(tableName))print(self.tableContent(tableName))print('************************************************************************************************')def readConfigAndOutputResults(self):passif __name__ == '__main__':configInfo = ConfigInfo('result.csv')configInfo.readConfig('config.cfg')

利用Python3 读sqlite数据库相关推荐

  1. python数据库操作sqlite_Python3操作SQLite数据库

    Python3操作SQLite数据库 SQLite SQLite,是一款轻型的数据库,是遵守ACID的关系型数据库管理系统,它包含在一个相对小的C库中.它是D.RichardHipp建立的公有领域项目 ...

  2. 利用SQLChiper对Android SQLite数据库加密

    利用SQLChiper对Android SQLite数据库加密 前言: 上篇文章讲了Android studio+SQLCipher加密SQLite数据库的几个坑,跳过这几个坑,那么SQLCipher ...

  3. 利用SQL语句在SQLite数据库中实现命令执行

    SQLite是世界上使用最多的数据库之一.然而,关于其安全方面的研究,都只涉及WebSQL和浏览器开发方面.我们相信这只是SQLite安全的冰山一角. 在对SQLite安全性的长期研究中,我们尝试在任 ...

  4. 利用SQLite数据库进行用户名、密码的注册和登录验证

    利用SQLite数据库进行存储用户名.密码等等其他信息 首先是activity_main布局界面 <RelativeLayout xmlns:android="http://schem ...

  5. php sqlite 注入,利用SQLite数据库文件实现任意代码执行

    *本文中涉及到的相关漏洞已报送厂商并得到修复,本文仅限技术研究与讨论,严禁用于非法用途,否则产生的一切后果自行承担. 前言 近期,我们对贝尔金WeMo智能家居设备的安全性进行了分析.在研究过程中,我们 ...

  6. android之利用SQLite数据库实现登陆和注册

    首先,说一下SQLite的概念: SQLite 是一个开源的嵌入式关系数据库,它可以减少应用程序管理数据的开销 , SQLite 可移植性好 . 很容易使用 . 很小 . 高效而且可靠 .目前在And ...

  7. python读数据库的通信协议是,Python操作SQLite数据库过程解析

    SQLite是一款轻型的数据库,是遵守ACID的关系型数据库管理系统. 不像常见的客户-服务器范例,SQLite引擎不是个程序与之通信的独立进程,而是连接到程序中成为它的一个主要部分.所以主要的通信协 ...

  8. android 创建文件夹_Android安全(四)数据库 之 SQLite数据库

    每个应用程序都要使用数据,Android应用程序也不例外,Android使用开源的.与操作系统无关的SQL数据库-SQLite.SQLite第一个Alpha版本诞生于2000年5月,它是一款轻量级数据 ...

  9. 安卓学习笔记29:使用SQLite数据库

    文章目录 零.学习目标 一.SQLite数据库概述 1.SQLite构成 2.SQLite数据类型 3.SQLite数据库特点 二.SQLite数据库管理工具 (一)数据库控制台管理工具 - sqli ...

  10. sqlite数据库中的sql语句大全-zhuan

    转载自http://hunankeda110.iteye.com/blog/1143258 2010年SQLite学习笔记之一 一. 如何获取SQLite最新版本 官方站点:http://www.sq ...

最新文章

  1. 基于新型忆阻器的存内计算原理、研究和挑战
  2. Python使用matplotlib可视化多个时间序列数据、添加双Y轴、以显示具有不同尺度的时间序列数据(secondary y axis)
  3. Linux下Tomcat的启动、关闭、杀死进程
  4. TypeError: Cannot read property 'gc' of undefined 使用百度地图报错
  5. react报错this.setState is not a function
  6. LVS+keepalived负载均衡
  7. C#--封装、继承、多态
  8. mybatis 调用存储过程_你真的该进来了解下MyBatis的SQL工作流程了
  9. 浅谈javaweb三大框架和MVC设计模式
  10. SQL 分页存储过程(转)
  11. 正则表达式与html信息提取,基于正则表达式的HTML信息提取.pdf
  12. 公司新来了一个质量工程师,说团队要保证 0 error,0 warning
  13. 为支持nginx高并发而修改的一些Linux内核参数
  14. 关于C#传给视图的字符串带有Html转义字符的处理
  15. reactive streams与观察者模式
  16. adb安装apk到智能TV上
  17. 怎样从微博下载视频?
  18. (R,线性回归)R语言里的模型诊断图(Residuals vs Fitted,Normal QQ , Scale-Location ,Residuals Leverage)
  19. 第一节 函数与极限——映射与函数
  20. 为何贩卖焦虑的文章如此受欢迎???

热门文章

  1. 求闰年的c语言程序函数,c语言闰年(闰年的算法c语言程序)
  2. 找不到文件“c:/Users/Administrator/Desktop/vue_dom2/node_modules/postcss-discard-overridden/types/index.d.
  3. java整形数组的最大最小值
  4. vue Uint8Array转字符串中文乱码
  5. 苹果怎样添加无线网络连接服务器,教你iphone8 icloud连接服务器时出错怎么办及苹果手机如何设置成指定名称的WiFi热点...
  6. 数字图像处理(三)图像复原(噪声生成,噪声滤波器,逆滤波,维纳滤波,有约束最小二乘恢复)
  7. OpenCV4学习笔记(17)——常用导数算子
  8. 有道词典(android)v4.3.3去广告清爽版+离线词,有道词典4.3.3安
  9. 手机照片误删除恢复 亲测可行 MTP模式下恢复数据 USB存储模式
  10. 自建网易云音乐解锁代理