源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

powershell玩转sqlite数据库详细介绍

  • 时间:2022-06-05 03:46 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:powershell玩转sqlite数据库详细介绍
脚本经常需要处理文本,有时候是行列整齐文本。那么powershell脚本处理行列文本有几种方法呢?一种是excel,另外的一些是?access?sqlite? sqlite是一个很小巧的,很方便嵌入到脚本语言中的,关系型数据库。它给powershell提供了一个免费的,处理行列整齐数据,存储数据,统计数据的极品神器。 只要你学会了它,上天入地皆可去得。而且以后学sql server,mysql,都类似,没有难度。 带着引号搜本文关键字: "^_^上天入地皆可去^_^" 发文初衷:世界上几乎没有讲powershell调用sqlite的帖子。 初稿,会更新。有错误欢迎指正,谢谢。 [b]------------------【sqlite 字段类型】------------------[/b] sqlite只有5种数据类型,用于存储。 数据类型 占用字节 描述 NULL  TEXT ? 使用数据库编码(UTF-8,UTF-16BE或者UTF-16LE)存放 INTEGER 根据值的大小以1,2,3,4,6或8字节存放 值是有符号整形 REAL 以8字节IEEE浮点数存放  BLOB 最多 1,000,000,000 字节 只是一个数据块,完全按照输入存放(即没有准换)存放。 使用时会将【内存数据类型】和【存储数据类型】之间进行转换。 如将布尔值,转换成INTEEGER存储。具体参见手册: WER@) 问:空值是? 答: null [url=http://www.sqlite.org/lang_select.html]http://www.sqlite.org/lang_select.html[/url] 问:查询数据的sql语句是? 答: SELECT '字段名' FROM '表名' WHERE 条件 问:查询结果去重的sql语句是? 答: SELECT DISTINCT '字段名' SELECT DISTINCT '字段名1','字段名2','字段名3','字段名4' #所有字段的值完全相同,才算重复。 问:集合去重的sql语句是? 答: SELECT 返回的集合1 UNION SELECT 返回的集合2 问:查询结果按 '字段名' 分组输出的sql语句是? 答: SELECT '字段名' FROM '表名' WHERE 条件 GROUP BY '字段名' ; GROUP BY 一定要放在WHERE之后,GROUP BY 一定要放在ORDER BY之前。 问:查询结果按 '字段名' 排序输出的sql语句是? 答: SELECT '字段名' FROM '表名' WHERE 条件 ORDER BY '字段名' ASC ; SELECT '字段名' FROM '表名' WHERE 条件 ORDER BY '字段名' DESC ; 问:隐藏的自增列叫什么? 答: rowid或_rowid_ 在没有INTEGER类型的主键时,存在这个隐藏字段。 问:sqlite有个叫sqlite3.exe的客户端软件。我可以用这个sqlite.exe + cmd + bat 玩转sqlite数据库么? 答: 基本不行。 简单来说powershell有内置的值类型,如小数数值,和表datetable。而bat中没有。 powershell字符串对象长度大,bat数据超过8000左右字母不行。 [b]------------------【例子】------------------ [/b] # 例子1 :专门给菜鸟编写的 PowerShell 操作Sqlite的例子。大量硬编码,快速上手。win10测试通过。[b] [/b]
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
文章到这就结束了,需要的朋友可以多看看实例。
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部