powershell玩转sqlite数据库

剧本常常须要处理文件,有时候是行列整齐文本。那么powershell脚本处理行列文本有两种艺术呢?1种是excel,其它的壹些是?access?sqlite?

   
powershell能够玩nosql数据库吗?答案是早晚的。只要那一个数据库兼容.net,就足以很容易地被powershell使用。

sqlite是2个很精妙的,很有利嵌入到脚本语言中的,关系型数据库。它给powershell提供了二个免费的,处理行列整齐数据,存款和储蓄数据,总计数据的特级神器。
设若你学会了它,上天入地皆可去得。而且事后学sql
server,mysql,都就好像,未有难度。

发文初衷:世界上大约从不讲powershell调用nosql的帖子,更未曾讲powershell调用litedb的。唯有寥寥powershell调用monodb的代码。

带着引号搜本文关键字: “^_^上天入地皆可去^_^”

2017-拾-0八创新,小说和本子帮忙litedb
四.0。有错误欢迎指正,多谢。

发文初衷:世界上差不离从未讲powershell调用sqlite的帖子。

 

  

powershell,nosql,litedb,bson,数据库,powershell传教士

初稿,会更新。有不当欢迎指正,谢谢。

 

powershell,sqlite,数据库,database,powershell传教士

 

  

—【存款和储蓄格式】—

BSON是壹种恍若json的1种二进制情势的存款和储蓄格式,简称Binary JSON。
它和JSON一样,扶助内嵌的文书档案对象和数组对象,可是BSON有JSON未有的1些数据类型,如Date和BinData类型。

{“hello”:”world”} 那是一个BSON的例子,
在那之中”hello”是键名,它一般是string类型,
后边的”world”是键值,它的类型壹般是string,double,array,binarydata等类别。

bson存款和储蓄记录的最大单位是Document,能够把这么些Document掌握为一条记下。

据说litedb手册中的表达,限制为:
每种数据库小于二GB;各种document小于1MB;

即 litedb—》表—》bson_Document—》bson_Document—》键值对

出于值能够是空,所以各类bson_Document最小必须含有一个键。如:{“aaa”:””}

 

 

——————【sqlite 字段类型】——————

sqlite唯有五种数据类型,用于存款和储蓄。
数据类型 占用字节 描述
NULL
TEXT ? 使用数据库编码(UTF-8,UTF-1陆BE或许UTF-1六LE)存放
INTEGE大切诺基 遵照值的深浅以一,2,3,肆,6或8字节存放在 值是有号子整形
REAL 以捌字节IEEE浮点数存放
BLOB 最多 1,000,000,000 字节
只是1个数据块,完全遵照输入存放(即未有准换)存放。

运用时会将【内部存款和储蓄器数据类型】和【存款和储蓄数据类型】之间进行更换。
如将布尔值,转换到INTEEGE智跑存款和储蓄。具体参见手册:
http://www.sqlite.org/datatype3.html
未曾日期型,未有布尔型,那点要专注。

—【应用场景,主要!】—

下为个人整理的使用场馆,如有不妥,请斧正。

1 单机,玉石白,中型小型量数据。单个库总内容小于一.八GB。

2类似于sqlite,但sqlite是sql数据库,这些是nosql。即键值对,即每种库中数据唯有一列。
即nosql数据库不切合储存行列数据。但数组,哈希表,和之间对象转换比sql数据库方便。
查询数据毫无sql语法用函数。

3须要仓库储存变量名,变量值,的利用。如拿litedb数据库当ini文件用,当xml文件用。

 

——————【应用场景,主要!】——————

powershell 传教士 原创小说 始作于 201六-0壹-0一 安慕希, 改
允许转发,但必须保留名字和出处,不然追究法律权利

下为个人整理的行使场面,如有不妥,请斧正。

壹 存款和储蓄数据。中量数据。
本条中量数据是指,由于sqlite表不帮助分区,所以应当在1亿条以下,或许越来越少。
excel表存款和储蓄数据有个行数(记录条数)限制,拾四万左右。比如自身有110万数据,唯有壹列,要总计列最大值。那时用excel就不便利了。
excel中每单元格最大存款和储蓄3二k字节,access201陆中,每一种text字段的容量存储为64k字节,行数倒是够用。

二 种种数码计算。
3由于sqlite援救纯内部存款和储蓄器数据库,把全数库放在内部存款和储蓄器中。能够组合上述二种必要。即从大库查询(或导出)部分数据,在内部存储器中展开总括。
四 缺点是:数据显示不好。不像excel、access那样(对业务人员)有表,图。
伍 sqlite是关系型数据库,join,group by,order by那么些基本效率和mysql,sql
server比不逊色。单线程品质也很好。其余单机,石榴红,软件1M以下,帮忙数据量非常大,比access强。

 —【图形管理工科具】—

https://github.com/falahati/LiteDBViewer
https://github.com/JosefNemec/LiteDbExplorer     推荐

 

 

——————【图形管理工具】——————

英文:
SQLiteStudio http://sqlitestudio.pl/
SQLiteManager http://www.sqlabs.com/
SQLite Expert http://www.sqliteexpert.com/
SQLite Developer http://www.sqlitedeveloper.com/
SQLiteSpy http://www.yunqa.de/delphi/doku.php/products/sqlitespy/index
RazorSQL http://www.razorsql.com/

中文:
SQLite Administrator http://sqliteadmin.orbmu2k.de/
打不开三.x本子数据库
navicat for sqlite http://www.xiazaiba.com/html/3350.html 推荐
Database.NET http://fishcodelib.com/database.htm 推荐

 

—【下载安装】—

1 官网为:             http://www.litedb.org/

2 github地址为:       https://github.com/mbdavid/LiteDB/

 

 

——————【下载安装】——————

ps调用sqlite的两种格局。那里我们重点介绍第二种
1 https://psqlite.codeplex.com/
2 https://github.com/RamblingCookieMonster/PSSQLite
上述贰种,都帮衬扶助winxp,powershell2.0,及以上。

2.1 下载:
https://github.com/RamblingCookieMonster/PSSQLite/archive/master.zip

2.2
建立【C:\Users\您的用户名\Documents\WindowsPowerShell\Modules】目录,并解压:
把 PSSQLite-master\PSSQLite 那个目录复制到,你的模块目录中。
即modules目录中,含有PSSQLite那一个目录。

2.3 查看模块中的全部命令:
Import-Module pssqlite
get-command * -module pssqlite

返回
CommandType Name Version Source


Function Invoke-SQLiteBulkCopy 1.0.1 pssqlite
Function Invoke-SqliteQuery 1.0.1 pssqlite
Function New-SQLiteConnection 1.0.1 pssqlite
Function Out-DataTable 1.0.1 pssqlite

二.4 1键安装命令:
#1键装置命令信赖.net 4.五 及以上。powershell 3.0
及以上。假若不满意条件,请用手动安装方式。
mkdir “$env:USERPROFILE\Documents\WindowsPowerShell\Modules”
Invoke-WebRequest
https://github.com/RamblingCookieMonster/PSSQLite/archive/master.zip
-OutFile .\master.zip
add-Type -AssemblyName ‘System.IO.Compression.Filesystem’
[System.IO.Compression.ZipFile]::ExtractToDirectory(“$pwd\master.zip”,”$pwd”)
Copy-Item -Recurse PSSQLite-master\PSSQLite
“$env:USERPROFILE\Documents\WindowsPowerShell\Modules”
Import-Module pssqlite
get-command * -module pssqlite

—【常用对象列表】—

LiteDB.LiteDatabase

LiteDB.BsonDocument               

LiteDB.BsonMapper    bson键值对<—>对象转换者类

LiteDB.Json塞里alizer  bson键值对<—>json键值对转换类。

LiteDB.BsonArray    bson数组

LiteDB.BsonValue    bson值
布尔,日期,guid,object对象,bson值,字节数组,int3二,int6肆,double,字符串,list,字典,等。

LiteDB.LiteFileStorage 存款和储蓄文件

LiteDB.Query      查询类

 

 

——————【命令扶助】——————

Invoke-SqliteQuery -DataSource $库文件名 -query $查询字符串 -as
输出格式(PSObject,DataRow,DataTable,DataSet,SingleValue)

$内存库 = New-SQLiteConnection -DataSource :MEMORY:
Invoke-SqliteQuery -SQLiteConnection $内存库 -Query “CREATE TABLE
OrdersToNames (OrderID INT PRIMARY KEY, fullname TEXT);” #建表语句
Invoke-SqliteQuery -SQLiteConnection $内存库 -Query “INSERT INTO
OrdersToNames (OrderID, fullname) VALUES (1,’Cookie Monster’);”
#插入语句
Invoke-SqliteQuery -SQLiteConnection $内存库 -Query “SELECT xxx FROM yyy
WHERE mmm=nnn;” #你想要的计算语句

问:csv如何入库?
答:
最佳用图片工具搞,也能够用下列类似命令。
$dt1 = get-process | Out-DataTable
Invoke-SQLiteBulkCopy -DataTable $st1 -DataSource $DataSource -Table
表名
实际参见例子贰

 

—【常用函数列表】—

摘自
http://www.cnblogs.com/asxinyu/p/dotnet\_Opensource\_project\_LiteDB.html

——Query—– Query.All
重返全部的多寡,能够采取内定的索引字段举行排序

Query.EQ 查找重临和钦赐字段值相等的数码

Query.LT/LTE 查找< 或 <= 有些值的多寡

Query.GT/GTE 查找> 或 >= 有些值的数目

Query.Between 查找在钦命区间范围内的多少

Query.In – 和SQL的in类似吧,查找和列表中值相等的数目

Query.Not – 和EQ相反,是不等于有些值的多少

Query.StartsWith 查找以某些字符串起先的数量

Query.Contains 查找包含某些字符串的数额,那个查询只扫描索引

Query.And 1个查询的参差不齐

Query.Or 三个查询结果的并集

——linq—–

FindAll: 查找表大概聚众中装有的结果记录

FindOne:重回第3个或然默许的结果

FindById: 通过索引再次回到单个结果

Find: 使用查询表明式只怕linq表达式查询重回结果

Count() , Exists(),Min() , Max()

 

 

——————【powershell操作sqlite经验】——————

壹 不外乎查询出游,查询出列, 或询问出表,然后foreach。
二 不外乎去重,合并结果,总计最大,列中数字合计。

问:乍开端小编不纯熟sql语句如何做?
答:
用拐棍!完全采取图形程序(找传教士要navicat for
sqlite)来建表,导入数据,在图片软件中运维sql。

问:今后本身1度会用【常用sql语句】+【图形程序】来处理多少了。为何还要用剧本呢?
答:
图片程序毕竟只是根拐杖。你要拍卖的多寡有十分大可能率要先取到一行,(比如用”_”先拆分,分成n列)预先用ps处理后再入库。
Curry输出的队列,也很简单(用Out-GridView进行显示等。)所以说照旧要ps+sqlite共同处理的。

 

—【例子,重要!】—

简易的话正是用字符串,日期等,构造键值对。用n个键值对组合bson_Document,然后增加和删除查改那些bson_Document。

下列脚本 win10 + powershell 伍.一  + litedb 四.0 测试通过。

 

 

#  powershell_for_litedb  v4.0 2017-10-08
$script:脚本存储路径 = Split-Path -Parent   $myinvocation.mycommand.path
$Env:Path += ";$script:脚本存储路径;"

$script:数据库客户端目录 = $script:脚本存储路径
$script:数据库客户端文件名 = 'LiteDB.dll'
$script:数据库客户端绝对文件名 = $script:数据库客户端目录 + '\' + $script:数据库客户端文件名

$script:数据库文件名 = 'test001.db'
$script:数据库绝对文件名 = $script:数据库客户端目录 + '\' + $script:数据库文件名



if (test-path  $script:数据库客户端绝对文件名)
{
    try
    {
        Add-Type -LiteralPath $script:数据库客户端绝对文件名
        write-host "---LiteDB程序载入完成---"
    }
    catch [Exception]
    {
        $error[0].Exception.LoaderExceptions
        Write-Error "加载 $script:数据库客户端文件名 出错!"
        exit 2
    }
}
else
{
    Write-Error "找不到 $script:数据库客户端文件名 !"
    exit 1
}

$数据库001 = [LiteDB.LiteDatabase]::new($script:数据库绝对文件名)
[string]$查询表名 = $数据库001.GetCollectionNames()
if ($查询表名 -eq "")
{
    write-host "空数据库,无表"
}
else
{
    $查询表名
}

#打开表,没有的话新建表
$表001 = $数据库001.GetCollection("aaaa")
#$查询结果 = $表001.findall()
#$查询结果

# ---------------插入-----------------
$字符串 = 'aa'
$数字 = 123
$日期 = get-date
$真假 = $true
$数组 = "a","1","kkk"

$哈希表2 = @{
    name  = $字符串;
    age   = $数字 ;
    bron  = $日期 ;
    sex   = $真假 ;
    array = $数组;
    嘻嘻    = '哈哈'
}

$json_哈希表2 = ConvertTo-Json -InputObject  $哈希表2
$bson_哈希表2 = [LiteDB.JsonSerializer]::Deserialize($json_哈希表2)
$bson_哈希表2["_id"] = [LiteDB.ObjectId]::NewObjectId() #必须给bson_document,建一个id。

$表001.Insert($bson_哈希表2)


# -------------插入键值对-------------
[LiteDB.BsonValue]$值2 = 'powershell 传教士 原创文章 2017-10-08,允许转载,但必须保留名字和出处,否则追究法律责任传教士。初稿,有错误欢迎指正,谢谢。'
$键2 = '声明'
$bson_Document = [LiteDB.BsonDocument]::new()
$bson_Document["_id"] = [LiteDB.ObjectId]::NewObjectId()
$null = $bson_Document.add($键2,$值2)
$表001.Insert($bson_Document)


#------------------查询--------------------
#查询必须输入键名,键值作为参数。
#返回的都是bson_Document,转换成json,再转换成哈希表对象。再取值。
$查询结果1 = $表001.find([LiteDB.query]::eq("name","aa"))
"---1---"
$查询结果1


$查询结果2 = $表001.find([LiteDB.query]::gt("age","124"))
"---2---"
$查询结果2


$查询结果3 = $表001.find([LiteDB.query]::StartsWith("嘻嘻","哈"))
"---3---"
$查询结果3

 

 

DotNet开源大学本科营  写的两篇 litedb的牵线帖子

.NET平台开源项目速览(三)小巧轻量级NoSQL文件数据库LiteDB 

.NET平台开源项目速览(七)关于NoSQL数据库LiteDB的分页查询化解进度

 

—————【根据官网手册,增减的sql教程】—————-

sqlite官网,手册地方:
http://www.sqlite.org/lang.html

问:什么是(关系型)数据库索引,索引有怎么着好处坏处?
答:
目录是把冬日的每条数据,添加了2个从小到大的一1,变成了平稳的数量。
种种字段都足以添加叁个索引。恐怕n个字段公用二个目录。
目录加快了查询速度,下落了插入速度。

 

问:怎么样火速插入数据?
答:
一 较少并发写入,最佳只有3个线程在读写。
二 尽量减弱索引。
叁 使用工作。事务是由类似【STAWranglerT
TRANSACTION】,【COMMIT】sql关键字包涵的一声令下。
事情的职能是,在富有数据插入后,即【COMMIT】后,才二回性修改全体索引,而不是插入一条,修改叁次索引。
四 使用.net连接器封装的业务。即类似sql bulkcopy 之类的办法。

 

问:事务相关的sql语句是?
答:
BEGIN TRANSACTION; 事务伊始
COMMIT TRANSACTION; 显示事务被交给,数据表中的多少也产生了扭转。
ROLLBACK TRANSACTION; 回滚

 

问:为何传教士也很爱sqlite?
答:
PRAGMA encoding; # 这些命令将赶回库编码暗许值,utf-捌
用 汉语表名,字段名毫无难题!!!

问:打开库文件名后,列出具有《库名》的sql语句是?
答:
PRAGMA database_list;

 

问:打开sqlite库文件后,默许的数据库名是?
答:
main

 

问:列出全数表名的sql语句是?
答:
SELECT name FROM sqlite_master WHERE type=’table’ order by name;

问:测试表是还是不是存在的sql语句是?
答:
SELECT name FROM sqlite_master WHERE name=’表名’ ;

问:列出有些表的有着索引,要用的sql语句是?
答:
PRAGMA index_list(表名);

问:建立表的sql语句是?
答:
CREATE TABLE IF NOT EXISTS ‘表名’ (‘自增’ INTEGER PRIMARY KEY
AUTOINCREMENT, ‘字段名2’ REAL)
CREATE TABLE IF NOT EXISTS ‘表名’ (‘字段名1’ INTEGER AUTOINCREMENT,
‘字段名2’ REAL, ‘字段名3’ TEXT, ‘字段名4’ BLOB,PRIMARY KEY
(‘字段名1’))
CREATE TEMP TABLE #建权且表
PRIMARY KEY #主键
AUTOINCREMENT #自增

问:建立,删除索引的sql语句是?
答:
CREATE INDEX IF NOT EXISTS 索引名 ON 表名(字段名)
CREATE INDEX IF NOT EXISTS 索引名 ON 表名(字段名 ASC,字段名2 DESC)
CREATE UNIQUE INDEX IF NOT EXISTS 索引名 ON 表名(字段名 DESC)#唯一索引

删除索引:
DROP INDEX IF EXISTS 索引名

传教士问:
自作者搜遍了中外,蕴涵官方,也搞不清楚为什么不是DROP INDEX IF EXISTS 索引名
on 表名?而是DROP INDEX IF EXISTS 数据库名.索引名
三个Curry,能够有五个表啊,请问哪个人能答?

问:什么是sqlite数据清理?有啥便宜?
答:
删除一条记下时只是打上删除标记。数据清理是彻底删除数据。
汪洋的插入、更新和删除等操作后,清理下数据,有助于读取品质。还会送还空间给操作系统。
sqlite的多少清理,只可以对整个数据库来操作。

 

问:数据清理命令是?
答:
Attached 数据库名 连接数据库。
vacuum 删除已经打上删除标记的表,记录。
reindex 重生成索引

 

问:查看表结构的sql语句是?
答:
PRAGMA table_info(表名);

问:清空表的sql语句是?
答:
delete from 表名;
update sqlite_sequence SET seq = 0 where name =’表名’;
#自增字段归零。sqlite_sequence是main库中的特殊表。

问:插入数据的sql语句是?
答:
INSERT INTO 表名 VALUES(null,21.5,’this is a texttest.’,’blob
WER@#$@$%^^’)

问:空值是?
答:
null

http://www.sqlite.org/lang\_select.html
问:查询数据的sql语句是?
答:
SELECT ‘字段名’ FROM ‘表名’ WHERE 条件

问:查询结果去重的sql语句是?
答:
SELECT DISTINCT ‘字段名’
SELECT DISTINCT ‘字段名1′,’字段名2′,’字段名3′,’字段名4’
#装有字段的值完全相同,才算重复。

 

问:集合去重的sql语句是?
答:
SELECT 重临的集合1
UNION
SELECT 重临的集合二

 

问:查询结果按 ‘字段名’ 分组输出的sql语句是?
答:
SELECT ‘字段名’ FROM ‘表名’ WHERE 条件 GROUP BY ‘字段名’ ;
GROUP BY 一定要放在WHERE之后,GROUP BY 一定要放在OHavalDE昂Cora BY以前。

问:查询结果按 ‘字段名’ 排序输出的sql语句是?
答:
SELECT ‘字段名’ FROM ‘表名’ WHERE 条件 ORDER BY ‘字段名’ ASC ;
SELECT ‘字段名’ FROM ‘表名’ WHERE 条件 ORDER BY ‘字段名’ DESC ;

 

问:隐藏的自增列叫什么?
答:
rowid或_rowid_
在没有INTEGE大切诺基类型的主键时,存在那些隐藏字段。

 

问:sqlite有个叫sqlite3.exe的客户端软件。小编得以用那么些sqlite.exe + cmd +
bat 玩转sqlite数据库么?
答:
基本不行。
简言之的话powershell有停放的值类型,如小数数值,和表datetable。而bat中从未。
powershell字符串对象长度大,bat数据超过捌仟左右字母不行。

——————【例子】——————

 

# 例子1 :专门给菜鸟编写的 PowerShell 操作Sqlite的例子。大量硬编码,快速上手。win10测试通过。
Import-Module pssqlite


$sqlite库文件名 = "a:\pscode\sqlite\test001.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:\pscode\sqlite\test006.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

 

 

 

————【powershell sqlite 模块 扩充阅读】—————

问:sqlite模块中的dll库文件有怎么着?哪来的?
答:
模块中有四个库文件,分别是【SQLite.Interop.dll】和【System.Data.SQLite.dll】。
下载地址在:
http://system.data.sqlite.org/index.html/doc/trunk/www/downloads.wiki

 

问:【SQLite.Interop.dll】是个啥玩意儿?
答:
自家说过,只要那些数据库包容.net,就能够很不难地被powershell使用。
【SQLite.Interop.dll】是个.net用户调用sqlite的(中介)插件。
透过它调用【System.Data.SQLite.dll】中的System.Data.SQLite类。

 

问:怎么着升级那四个库呢?
答:
1般来讲无需提升。若要升级就要分3二,陆19人。然后要看.net版本。还得选静态库,或动态库。
选的话当然三九人,陆10人,都要选。选静态库。
win7中.net
4.51曾经淘汰了,所以应当选肆.5.2编写翻译的。可是呢,未有4.伍.二的。这大家就只可以选4.5.一的了。
而win10中,应选4.6的。

 

—————-【完】—————-

发表评论

电子邮件地址不会被公开。 必填项已用*标注