【adodb插件】支持excel,access,txt,csv,txt数据库操作方式,理论上只要支持adodb的都可以支持

瞌睡蟲子 3月前 1222

2019-05-08:

1、解决条件查询字典对象,and、or sql语句双重sql白名单字符过滤问题。

2、修复分页查询,数据错乱问题。


2019-04-29:

CREATE TABLE建表,字段类型参考:

https://docs.microsoft.com/zh-cn/office/client-developer/access/desktop-database-reference/equivalent-ansi-sql-data-types


2019-04-14更新:

1、修改csv格式兼容bug;

2、增加获取表,获取字段名方法;

3、增加数组格式数据添加、批量添加。便于数据爬取格式直接导入;

4、增加mdb,mdf,accdb文件不存在时自动创建;

5、增加分页查询能力。


MDB demo:

Import adodb
dim bRet = ""
dim hWeb = ""
// 初始化adodb,链接到xls文件
adodb.initAdodb("d:\\aaa.mdb")
// 判断表名是否存在
If not adodb.existsTable("sheet1")
    // 创建表,指定字段和类型
    adodb.exe("CREATE TABLE sheet1 (username VARCHAR(255),comment MEMO,num double )")
End If
// 列出所有表
TracePrint(adodb.getTables())
// 插入数据
adodb.exe( "INSERT INTO sheet1(username,comment,num)values('haha','uibot',123)")
// 查询数据,二维数组格式
TracePrint(adodb.query("select * from sheet1"))
// 查询数据,字典格式
TracePrint(adodb.query("select * from sheet1 where username = %s",True,["haha"]))
// 新封装了对象操作方法,如下:
// excel的sheet页,用[你的sheet页名$]表示表
dim table = "sheet1"
//     sheet的第一行,定义为字段名
dim keys = ["username","comment","num"]
//    过滤条件,根据字段名和值过滤
dim condit = {"num":456}
//     字典格式数据写入excel
dim colume = {"username":"我是路过的","comment":"我也是","num":456}
dim colume1 = {"username":"我是路过的1","comment":"我也是1","num":45644}
// excel添加一行,向sheet1页,插入一行数据 username列:我是路过的,comment列:我也是,num列:456
adodb.add(table,colume)
// 再加一行
adodb.add(table,colume)
// 查询一个,看看结果
TracePrint(adodb.sel(table))
// 修改
adodb.update(table, colume1, condit)
// 查询一个,看看结果
TracePrint(adodb.sel(table))
adodb.close()

运行效果:

RPA,RPA机器人_【adodb插件】支持excel,access,txt,csv,txt数据库操作方式,理论上只要支持adodb的都可以支持

CSV demo:

Import adodb
dim bRet = ""
dim hWeb = ""

// 初始化adodb,链接到xls文件
adodb.initAdodb("d:\\aaa.csv")
// 注意csv的文件名即表名。但是.要换成#
Dim table = "aaa#csv"
// 判断表名是否存在
If not adodb.existsTable(table)
    // 创建表,指定字段和类型
    adodb.exe("CREATE TABLE aaa#csv (username VARCHAR(255),comment MEMO,num double )")
End If
// 列出所有表(目录下所有文本文件)
dim tables = adodb.getTables()
TracePrint(tables)
// 列出字段
dim keys = adodb.getColumes(table)
TracePrint(keys)
// 插入数据,sql形式
adodb.exe( "INSERT INTO aaa#csv(username,comment,num)values('haha','uibot',123)")
// 查询数据,二维数组格式
TracePrint(adodb.query("select * from aaa#csv"))
// 查询数据,字典格式
TracePrint(adodb.query("select * from aaa#csv where username = %s",True,["haha"]))
// 新封装了对象操作方法,如下:
// 过滤条件,根据字段名和值过滤,字典格式{"key":"value","or":{"a":"b","c":"d",and:{"e":"f","g":"h"}。支持值sql =
dim condit = {"num":456}
// 字典格式数据写入excel
dim colume = {"username":"我是路过的","comment":"我也是","num":456}
dim colume1 = {"username":"我是路过的1","comment":"我也是1","num":45644}
// 字典格式添加:csv添加一行,向sheet1页,插入一行数据 username列:我是路过的,comment列:我也是,num列:456
adodb.add(table,colume)
// 再加一行
adodb.add(table,colume)
// 查询一个,看看结果
TracePrint(adodb.sel(table))
// 修改 csv不支持修改
// adodb.update(table, colume1, condit)
// 输入值
values = ["111","222","3333"]
// 数组格式添加
adodb.addList(table, keys, values)
values = [["111","222","3333"],["456","564","654"],["789","897","987"]]
// 批量数组格式添加
adodb.addList(table, keys, values)
// 查询一个,看看结果
TracePrint(adodb.sel(table))
dim key,values
adodb.close()

运行效果:

RPA,RPA机器人_【adodb插件】支持excel,access,txt,csv,txt数据库操作方式,理论上只要支持adodb的都可以支持


2019-04-05更新说明:

增加excel对象格式数据操作,基于jet支持97版本xls,不依赖excel版本。

Import adodb
dim bRet = ""
dim hWeb = ""
// 初始化adodb,链接到xls文件
adodb.initAdodb("d:\\aaa5.xls")
// 判断表名是否存在
If not adodb.existsTable("sheet1")
    // 创建表,指定字段和类型
    adodb.exe("CREATE TABLE sheet1 (username VARCHAR(255),comment MEMO,num double )")
End If
// 列出所有表
TracePrint(adodb.getTables())
// 插入数据
adodb.exe( "INSERT INTO [sheet1$](username,comment,num)values('haha','uibot',123)")
// 查询数据,二维数组格式
TracePrint(adodb.query("select * from [sheet1$]"))
// 查询数据,字典格式
TracePrint(adodb.query("select * from [sheet1$] where username = %s",True,["haha"]))
// 新封装了对象操作方法,如下:
// excel的sheet页,用[你的sheet页名$]表示表
dim table = "[sheet1$]"
//     sheet的第一行,定义为字段名
dim keys = ["username","comment","num"]
//    过滤条件,根据字段名和值过滤
dim condit = {"num":456}
//     字典格式数据写入excel
dim colume = {"username":"我是路过的","comment":"我也是","num":456}
dim colume1 = {"username":"我是路过的1","comment":"我也是1","num":45644}
// excel添加一行,向sheet1页,插入一行数据 username列:我是路过的,comment列:我也是,num列:456
adodb.add(table,colume)
// 再加一行
adodb.add(table,colume)
// 查询一个,看看结果
TracePrint(adodb.sel(table))
// 修改
adodb.update(table, colume1, condit)
// 查询一个,看看结果
TracePrint(adodb.sel(table))
adodb.close()

运行结果:

RPA,RPA机器人_【adodb插件】支持excel,access,txt,csv,txt数据库操作方式,理论上只要支持adodb的都可以支持

说明:

    该插件为adodb的python封装,支持excel,access,txt,csv,ini已数据库操作操作。

默认用的Microsoft.Jet.OLEDB.4.0,如果要用Microsoft.ACE.OLEDB.12.0请下载(注意你用的32位,还是64位office)

https://www.microsoft.com/zh-cn/download/confirmation.aspx?id=13255

    要使用其他adodb支持,请自行百度参数方式。

Microsoft.Jet.OLEDB.4.0支持说明:https://www.connectionstrings.com/microsoft-jet-ole-db-4-0/

Microsoft.ACE.OLEDB.12.0支持说:https://www.connectionstrings.com/ace-oledb-12-0/


插件安装:

将附件《adodb插件.rar》解压缩到UB的安装目录即可,注意不是UB根目录下面


使用方法:

{
	"ADD" : 
	{
		"Description" : "以字典形式添加数据。支持字典(单条数据),字典数组(多条数据,批量添加)。",
		"TranslateTemplate" : "数据表名%1%,要添加的数据%2%"
	},
	"ADDLIST" : 
	{
		"Description" : "以数组形式添加数据,注意:字段和数据的顺序一致。支持一维数组(单条数据),二维数组(多条数据,批量添加)。"
		"TranslateTemplate" : "数据表名%1%,字段名数组%2%,要添加的数据%3%"
	},
	"CLOSE" : 
	{
		"Description" : "关闭数据链接,注意:使用完以后一定注意关闭。",
		"TranslateTemplate" : "释放数据库链接"
	},
	"DELETE" : 
	{
		"Description" : "以字典格式删除数据,简单支持and,or。字典格式{"key":"value","or":{"a":"b","c":"d",and:{"e":"f","g":"h"}。",
		"TranslateTemplate" : "数据表名%1%,条件字典%2%"
	},
	"Description" : "adodb插件,支持excel,access,csv,txt以数据库链接形成操作",
	"EXE" : 
	{
		"Description" : "执行sql语句,除了select的其他语句(select语句单独封装了方法)。\r\nsql语句支持%s占位符,参数有自动格式化白名单",
		"TranslateTemplate" : "sql语句%1%,(可选)格式化参数数组%2%"
	},
	"EXISTSTABLE" : 
	{
		"Description" : "判断数据库表名是否存在。",
		"TranslateTemplate" : "数据表名%1%"
	},
	"GETCOLUMES" : 
	{
		"Description" : "获取表所有的字段名。",
		"TranslateTemplate" : "数据表名%1%"
	},
	"GETROWS" : 
	{
		"Description" : "执行sql查询,以列数组数据形式,返回查询数据。",
		"TranslateTemplate" : "sql语句%1%,(可选)参数数组%2%"
	},
	"GETTABLES" : 
	{
		"Description" : "获取数据库所有的表名。",
		"TranslateTemplate" : "获取数据库所有的表名"
	},
	"INITADODB" : 
	{
		"Description" : "初始化数据库",
		"TranslateTemplate" : "数据库文件地址(或adodb链接字符串)%1%,(可选)adodb链接字典格式参数%2%"
	},
	"QUERY" : 
	{
		"Description" : "执行sql查询,以行数据形式,返回查询数据。不分页时查询所有数据(注意:ado分页查询不能写sql里面)。sql语句支持%s占位符,参数有自动格式化白名单",
		"TranslateTemplate" : "sql语句%1%,(可选)数组(False)或字典格式(True)返回%2%,(可选)格式化参数数组%3%,(可选)当前第%4%页[默认1],(可选)每页%5%条[默认10]"
	},
	"SEL" : 
	{
		"Description" : "对象化查询方式,以行数据形式,返回查询数据。查询条件简单支持and,or。字典格式{"key":"value","or":{"a":"b","c":"d",and:{"e":"f","g":"h"}。不分页时查询所有数据。",
		"TranslateTemplate" : "数据表名%1%,(可选)要查询的字段[默认所有字段]%2%,(可选)查询条件%3%,(可选)数组(False)或字典格式(True)返回%4%,(可选)是否去重[默认False]%5%,(可选)当前第%6%页[默认1],(可选)每页%7%条[默认10]"
	},
	"SELROWS" : 
	{
		"Description" : "对象化查询方式,以列数组数据形式,返回查询数据。查询条件简单支持and,or。字典格式{"key":"value","or":{"a":"b","c":"d",and:{"e":"f","g":"h"}。",
		"TranslateTemplate" : "数据表名%1%,(可选)要查询的字段[默认所有字段]%2%,(可选)查询条件%3%,(可选)是否去重[默认False]%5%"
	},
	"UPDATE" : 
	{
		"Description" : "对象化字典修改方式。修改后的值为字典格式。查询条件简单支持and,or。字典格式{"key":"value","or":{"a":"b","c":"d",and:{"e":"f","g":"h"}。",
		"TranslateTemplate" : "数据表名%1%,修改后的值%2%,查询条件%3%"
	}
}


实例:

Import adodb
// 初始化adodb,链接到xls文件
adodb.initAdodb("d:/aaa5.xls")
// 判断表名是否存在
If not adodb.existsTable("sheet1")
    // 创建表,指定字段和类型
    adodb.exe("CREATE TABLE sheet1 (username VARCHAR(255),comment MEMO,num double )")
End If
// 列出所有表
TracePrint(adodb.getTables())
// 插入数据
adodb.exe( "INSERT INTO [sheet1$](username,comment,num)values('haha','uibot',123)")
// 查询数据,二维数组格式
TracePrint(adodb.query("select * from [sheet1$]"))
// 查询数据,字典格式
TracePrint(adodb.query("select * from [sheet1$] where username = %s",True,["haha"]))
// 关闭连接
adodb.close()

运行效果:

RPA,RPA机器人_【adodb插件】支持excel,access,txt,csv,txt数据库操作方式,理论上只要支持adodb的都可以支持


后记:

暂时只测试了xls,其他格式大家发现有问请反馈一下,持续优化


上传的附件:
最新回复 (22)
  • 夜行 3月前
    2

    顶起来,,,支持,,拿走喽,,

  • Kai 3月前
    3


  • 瞌睡蟲子 3月前
    4
    Kai
    sql错误,username='haha'。sql里面需要用单引号
  • 武先生 3月前
    5
    插件不能可视化操作吗
  • 瞌睡蟲子 3月前
    6
    武先生 插件不能可视化操作吗
    暂时还不行,后面会支持。
  • 陈陈陈 2月前
    7
    CSV有没有支持添加列数据的案例啊,比如已经找到key1下的指定values1,然后将新的值添加到key2下的values2位置
  • 瞌睡蟲子 2月前
    8
    陈先生_24171 CSV有没有支持添加列数据的案例啊,比如已经找到key1下的指定values1,然后将新的值添加到key2下的values2位置
    首先,你得有key1,key2列字段。如果没有key2字段的话,得用SQL ALTER TABLE语句创建字段。如果已存在key2字段,用SQL udpate table set key2=‘xxx’ where key1='xxx',来更新数据。
  • 夜行 2月前
    9
    这个比数据库那个要强大是吧?会这个数据库那个就用不到了
  • 瞌睡蟲子 2月前
    10
    夜行 这个比数据库那个要强大是吧?会这个数据库那个就用不到了
    不是这样讲,aodb是微软的链接组件,可以通过ODBC链接到mysql,oracle……数据库。同时他也支持jet,ace链接到excel,access作为数据库。而dbutil是专门服务数据链接的链接池。
    adodb,dbutil都可以链接数据库操作数据。但是adodb得安装ODBC驱动,dbutil驱动是python模块。而excel,access,csv这些是adodb自带的能力,dbutils没有。
  • 陈陈陈 2月前
    11
    Dim table = "aaa#csv"
    dim colume1 = {"username":"我是路过的","comment":"我也是","num":45644}
    adodb.DELETE(table,colume1)
    用DELETE这个命令来执行删除csv里面的数据,为什么会删不掉呢?我代码写错了么?
  • 瞌睡蟲子 2月前
    12
    陈先生_24171 Dim table = "aaa#csv" dim colume1 = {"username":"我是路过的","comment ...

    excel,csv 不支持delete语句,只能update所有字段为null

  • 阳光普照 2月前
    13
    解压后是:UiBotCreator  目录,如果放到UiBotCreator的安装目录,岂不是把它覆盖了!
  • 瞌睡蟲子 2月前
    14
    阳光普照 解压后是:UiBotCreator 目录,如果放到UiBotCreator的安装目录,岂不是把它覆盖了!
    就是和UB相同目录。文件都是UB不存在的,不存在覆盖。
  • 胡先生 2月前
    15
    内网不支持安装office,请问可以用吗
  • 瞌睡蟲子 2月前
    16
    胡先生 内网不支持安装office,请问可以用吗
    可以的
  • 刘_32069 2月前
    17
    先支持下,正好需要,下来研究研究
  • wqdscott 1月前
    18
    顶起来,支持。。。拿走了
  • 郑传茂 10天前
    19
    Access 2007-2016的accdb文件,提示无法识别,自己转2003的accdb格式
  • 瞌睡蟲子 10天前
    20
    郑传茂 Access 2007-2016的accdb文件,提示无法识别,自己转2003的accdb格式
    accesdb要安装ace
  • 郑传茂 9天前
    21

    { "File" : "uibot37860935516d84.task", "Line" : 72, "Message" : "Python调用出错:(-2147352567, '发生意外。', (0, 'Microsoft JET Database Engine', \"语法错误 (操作符丢失) 在查询表达式 ''Titles , toy commercials, any kids related brands. It\\\\'s a and with an original hand drawn design. It contains that are very to ' 中。\", None, 5003000, -2147217900), None)" }    mdb修改会提示出错,改用excel插入也是,请问长文本字符串插入需要经过修改设置转格式什么的吗

    包含了英文 ' 符号会报错,去掉就可以

  • 郑传茂 9天前
    22
    是安装过了,用的是 AccessDatabaseEngine_X64,accesdb 的2003格式 可以用,
  • 瞌睡蟲子 8天前
    23
    郑传茂 { "File" : "uibot37860935516d84.task" ...
    文本中的单引号我没处理哦,excel,mdb中单引号要用两个单引号转义
返回
发新帖