powershell玩转sqlite数据库详细介绍
脚本经常需要处理文本,有时候是行列整齐文本。那么powershell脚本处理行列文本有几种方法呢?一种是excel,另外的一些是?access?sqlite? sqlite是一个很小巧的,很方便嵌入到脚本语言中的,关系型数据库。它给powershell提供了一个免费的,处理行列整齐数据,存储数据,统计数据的极品神器。 带着引号搜本文关键字: "^_^上天入地皆可去^_^" 初稿,会更新。有错误欢迎指正,谢谢。 ------------------【sqlite 字段类型】------------------ sqlite只有5种数据类型,用于存储。 使用时会将【内存数据类型】和【存储数据类型】之间进行转换。 http://www.sqlite.org/datatype3.html 没有日期型,没有布尔型,这一点要注意。 ------------------【应用场景,重要!】------------------ powershell 传教士 原创文章 始作于 2016-01-01 元旦, 改 允许转载,但必须保留名字和出处,否则追究法律责任 下为个人整理的应用场合,如有不妥,请斧正。 1 存储数据。中量数据。 2 各种数据统计。 ------------------【图形管理工具】------------------ 英文: 中文: ------------------【下载安装】------------------ 2.1 下载: 编程小技巧下载:PSSQLite-master-jb51.zip 2.2 建立【C:Users你的用户名DocumentsWindowsPowerShellModules】目录,并解压: 2.3 查看模块中的所有命令: 返回 2.4 一键安装命令: ------------------【命令帮助】------------------ Invoke-SqliteQuery -DataSource $库文件名 -query $查询字符串 -as 输出格式(PSObject,DataRow,DataTable,DataSet,SingleValue)
问:csv如何入库? ------------------【powershell操作sqlite经验】------------------
问:现在我已经会用【常用sql语句】+【图形程序】来处理数据了。为啥还要用脚本呢? ---------------【根据官网手册,增减的sql教程】---------------- http://www.sqlite.org/lang.html
问:如何快速插入数据? 问:事务相关的sql语句是? 问:为什么传教士也很爱sqlite? 问:打开库文件名后,列出所有《库名》的sql语句是? 问:打开sqlite库文件后,默认的数据库名是? 问:列出所有表名的sql语句是? 问:测试表是否存在的sql语句是? 问:列出某个表的所有索引,要用的sql语句是? 问:建立表的sql语句是? 问:建立,删除索引的sql语句是? 删除索引: 传教士问: 问:什么是sqlite数据清理?有什么好处? 问:数据清理命令是? 问:查看表结构的sql语句是? 问:清空表的sql语句是? 问:插入数据的sql语句是? 问:空值是? http://www.sqlite.org/lang_select.html 问:查询结果去重的sql语句是? 问:集合去重的sql语句是? 问:查询结果按 '字段名' 分组输出的sql语句是? 问:查询结果按 '字段名' 排序输出的sql语句是? 问:隐藏的自增列叫什么? 问:sqlite有个叫sqlite3.exe的客户端软件。我可以用这个sqlite.exe + cmd + bat 玩转sqlite数据库么? ------------------【例子】------------------ # 例子1 :专门给菜鸟编写的 PowerShell 操作Sqlite的例子。大量硬编码,快速上手。win10测试通过。 Import-Module pssqlite $sqlite库文件名 = "a:pscodesqlitetest001.db" # 内存库用 ':MEMORY:' $sqlite库名 = "" #默认main $sqlite表名 = "biao001" #region sql #--- $建立_表_的sql语句 = "" $建立_索引_的sql语句 = "CREATE INDEX IF NOT EXISTS $将要建立的索引名 ON $sqlite表名($将要建立索引的字段名)" #powershell 传教士 原创例子 始作于 2016-01-01 元旦 允许转载,但必须保留名字和出处,否则追究法律责任 #--- $列出所有_库名_的sql语句 = 'PRAGMA database_list;' $列出所有_表名_的sql语句 = "SELECT name FROM sqlite_master WHERE type='table' order by name;" $列出某个_表结构_的sql语句 = "PRAGMA table_info($sqlite表名);" $列出某个_表的所有索引_的sql语句 = "PRAGMA index_list($sqlite表名); " #--- $测试_表是否存在_的sql语句 = "SELECT name FROM sqlite_master WHERE name='$sqlite表名' ; " #--- $插入一条_数据数据_的sql语句 = '' #--- $查询_表_的sql语句 = '' #--- $清空_表_的sql语句 = "delete from $sqlite表名 ;" #--- #endregion sql # 前提1 库文件确实存在,有【$sqlite库文件名】。则建立连接。 # 前提2 库文件不存在,有【$sqlite库文件名】和【$建立_表的sql语句】。则建立连接,然后建立表。 # 前提3 有【$建立_表的sql语句】和【$sqlite库文件名 = ':MEMORY:'】字符串。则建立连接,然后建立表。 if ($sqlite库文件名 -eq ':MEMORY:') { Write-Verbose '新建【内存】sqlite库文件' $我的Sqlite连接 = New-SQLiteConnection -DataSource $sqlite库文件名 Invoke-SqliteQuery -query $建立_表的sql语句 -DataSource $sqlite库文件名 } else { if (test-path $sqlite库文件名) { Write-Verbose 'sqlite库文件已经存在' $我的Sqlite连接 = New-SQLiteConnection -DataSource $sqlite库文件名 } else { Write-Verbose '新建sqlite库文件' $我的Sqlite连接 = New-SQLiteConnection -DataSource $sqlite库文件名 #新建表 $字段字串 = "" $建立_表_的sql语句 = @" CREATE TABLE IF NOT EXISTS '$sqlite表名' ($字段字串) "@ Invoke-SqliteQuery -query $建立_表_的sql语句 -DataSource $sqlite库文件名 } } # 列出库,列出表。前提【$我的Sqlite连接】已经建立。 Invoke-SqliteQuery -SQLiteConnection $我的Sqlite连接 -Query $列出所有_库名_的sql语句 Invoke-SqliteQuery -SQLiteConnection $我的Sqlite连接 -Query $列出所有_表名_的sql语句 # 建表索引。前提【$sqlite表名】,【$将要建立的索引名】,【$将要建立索引的字段名】已经赋值。 $将要建立的索引名 = 'yyy' $将要建立索引的字段名 = 'bbb' $建立_索引_的sql语句 = "CREATE INDEX IF NOT EXISTS $将要建立的索引名 ON $sqlite表名($将要建立索引的字段名)" Invoke-SqliteQuery -SQLiteConnection $我的Sqlite连接 -Query $建立_索引_的sql语句 # 测表是否存在,查表结构,查表索引。前提【$sqlite表名】已经赋值。 Invoke-SqliteQuery -SQLiteConnection $我的Sqlite连接 -Query $测试_表是否存在_的sql语句 #返回表名 Invoke-SqliteQuery -SQLiteConnection $我的Sqlite连接 -Query $列出某个_表结构_的sql语句 Invoke-SqliteQuery -SQLiteConnection $我的Sqlite连接 -Query $列出某个_表的所有索引_的sql语句 $查询_表_的sql语句 = "select * from '$sqlite表名' ;" $查询_表_的sql语句 Invoke-SqliteQuery -SQLiteConnection $我的Sqlite连接 -Query $查询_表_的sql语句 #插入数据 $字段1值 = 'null' $字段2值 = '121215687' $字段3值 = '' $插入一条_数据数据_的sql语句 = "INSERT INTO $sqlite表名 VALUES($字段1值,$字段2值) ;" #本例表只有2个字段 Invoke-SqliteQuery -SQLiteConnection $我的Sqlite连接 -Query $插入一条_数据数据_的sql语句 #查询数据 $查询_表_的sql语句 = "select * from '$sqlite表名' ;" $查询_表_的sql语句 Invoke-SqliteQuery -SQLiteConnection $我的Sqlite连接 -Query $查询_表_的sql语句 #清空 $清空_表_的sql语句 = "delete from $sqlite表名 ;" Invoke-SqliteQuery -SQLiteConnection $我的Sqlite连接 -Query $清空_表_的sql语句 Invoke-SqliteQuery -SQLiteConnection $我的Sqlite连接 -Query $查询_表_的sql语句 例子2:专门给菜鸟编写的 PowerShell 操作Sqlite bulkcopy的例子。大量硬编码,快速上手。win10测试通过。 Import-Module pssqlite $sqlite库文件名 = "a:pscodesqlitetest006.db" # 内存库用 ':MEMORY:' $sqlite库名 = "" #默认main $sqlite表名 = "biao001" if (test-path $sqlite库文件名) { Write-error 'sqlite库文件已经存在' exit 1 } $点net的DataTable = get-process | Out-DataTable #数据来源 $列集合 = $点net的DataTable.Columns [array]$每个字段名 = @() foreach ($temp001 in $列集合) { $每个字段名 += $temp001.ColumnName } #powershell 传教士 原创例子 始作于 2016-01-01 元旦 允许转载,但必须保留名字和出处,否则追究法律责任 $每个字段类型 = 'text' $temp002 = $每个字段名[0] $建立_表_的sql语句 = @" CREATE TABLE IF NOT EXISTS '$sqlite表名' ($temp002 $每个字段类型) "@ #Write-Warning $建立_表_的sql语句 Invoke-SqliteQuery -query $建立_表_的sql语句 -DataSource $sqlite库文件名 for ($i = 1;$i -le $每个字段名.Count ;$i++) { $temp003 = $每个字段名[$i] $建立_表_的sql语句 = @" ALTER TABLE '$sqlite表名' ADD COLUMN '$temp003' $每个字段类型 ; "@ # Write-Warning $建立_表_的sql语句 Invoke-SqliteQuery -query $建立_表_的sql语句 -DataSource $sqlite库文件名 } Invoke-SQLiteBulkCopy -DataTable $点net的DataTable -DataSource $sqlite库文件名 -Table $sqlite表名 -force 文章到这就结束了,需要的朋友可以多看看实例。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |