SQLKata 与 SQLite 最小示例 (Powershell)
SQLKata with SQLite minimal example (Powershell)
我有一个 sqlite 数据库说 c:\myDb.sqlite
我已经弄清楚如何在 SQLKata 中构建对此数据库的查询:
$query = New-Object SqlKata.Query("myTable")
$compiler = New-Object SqlKata.Compilers.SqliteCompiler
$query.Where("myColumn", "1")
$result = $compiler.Compile($query)
但我完全不知道如何将其提交到我的 Sqlite 数据库。
有人能帮忙吗?
谢谢,
亚历克斯
从 PowerShell 使其工作受到两个困难的阻碍:
通常加载与 NuGet 包相关的程序集,特别是 Microsoft.Data.Sqlite
NuGet 包通常需要在 PowerShell 中进行额外的、不明显的工作。
PowerShell 通常不会显示 扩展方法 - 例如.Get()
在查询实例上 - 需要显式调用 [SqlKata.Execution.QueryExtensions]
的静态方法。
具体来说,从 PowerShell 使用 NuGet 包需要以下步骤,这些步骤既不方便也不明显:
仅安装带有 Install-Package
or trying to use them from the local cache created by .NET SDK projects in $HOME/.nuget/packages
is often not enough, because any assemblies they depend on aren't then present in the same directory, which is what Add-Type
的 NuGet 包需要。
它们还必须通过辅助 .NET SDK 项目以适合平台的方式解压到单个目标文件夹(每个包或组合),如 this answer 中所述。 =30=]
此外,对于 Microsoft.Data.Sqlite
包,适合平台的 native 库(例如, win-x64\native\*.dll
来自 .NET SDK 项目发布文件夹的“运行times”文件夹子树)必须直接复制到 PowerShell(核心)中的目标文件夹,但奇怪的是 Windows PowerShell 中没有,至少从包版本 5.0.9
开始是这样
以下 示例代码使用 Add-NuGetType
辅助函数 ,可从 this MIT-licensed Gist 获得,它自动执行上述所有步骤:
注:
假设您已查看链接代码以确保它是安全的(我个人可以向您保证,但您应该始终检查),您可以直接安装 Add-NuGetType
如下(将显示有关如何在未来的会话中使用该功能或将其转换为脚本的说明):
irm https://gist.github.com/mklement0/7436c9e4b2f73d7256498f959f0d5a7c/raw/Add-NuGetType.ps1 | iex
当第一次 运行 时,该函数会下载并安装嵌入文件夹中的 .NET SDK 的私有副本,稍后下载的 NuGet 包会缓存在该文件夹中。此初始安装需要一段时间,下面使用的 -Verbose
开关会报告其进度。
Add-NuGetType
不是 用于 生产使用 ,而是用于 实验 使用 NuGet 包; 运行 help Add-NuGetType
了解更多信息。
# Reference the relevant namespaces.
using namespace SqlKata
using namespace SqlKata.Compilers
using namespace SqlKata.Execution
using namespace Microsoft.Data.Sqlite
# Load the SqlKata and Sqlite asssemblies.
# See the comments above for how to install the Add-NuGetType function.
# Note: On first call, a private copy of the .NET SDK is downloaded
# on demand, which takes a while.
Add-NuGetType -Verbose SqlKata, SqlKata.Execution, Microsoft.Data.Sqlite
# First, create sample database './sample.db' with table 'sample_table'
@'
create table sample_table (Name string, Age int);
insert into sample_table (Name, Age) values ("JDoe", 42), ("JRoe", 43);
.save ./sample.db
'@ | sqlite3
# Create a [SqliteConnection] instance...
$connection = [SqliteConnection]::new("Data Source=$PWD/sample.db")
# ... and create a query factory for it.
$sqliteDb = [QueryFactory]::new($connection, [SqlServerCompiler]::new())
# Create and execute a sample query.
$query = $sqliteDb.Query("sample_table").Where("Name", "JRoe")
# Note the need to use the static methods of [SqlKata.Execution.QueryExtensions],
# because PowerShell doesn't make *extension methods* automatically available.
[SqlKata.Execution.QueryExtensions]::Get($query) # outputs [Dapper.SqlMapper+DapperRow] instances
我有一个 sqlite 数据库说 c:\myDb.sqlite
我已经弄清楚如何在 SQLKata 中构建对此数据库的查询:
$query = New-Object SqlKata.Query("myTable")
$compiler = New-Object SqlKata.Compilers.SqliteCompiler
$query.Where("myColumn", "1")
$result = $compiler.Compile($query)
但我完全不知道如何将其提交到我的 Sqlite 数据库。
有人能帮忙吗?
谢谢,
亚历克斯
从 PowerShell 使其工作受到两个困难的阻碍:
通常加载与 NuGet 包相关的程序集,特别是
Microsoft.Data.Sqlite
NuGet 包通常需要在 PowerShell 中进行额外的、不明显的工作。PowerShell 通常不会显示 扩展方法 - 例如
.Get()
在查询实例上 - 需要显式调用[SqlKata.Execution.QueryExtensions]
的静态方法。
具体来说,从 PowerShell 使用 NuGet 包需要以下步骤,这些步骤既不方便也不明显:
仅安装带有
Install-Package
or trying to use them from the local cache created by .NET SDK projects in$HOME/.nuget/packages
is often not enough, because any assemblies they depend on aren't then present in the same directory, which is whatAdd-Type
的 NuGet 包需要。它们还必须通过辅助 .NET SDK 项目以适合平台的方式解压到单个目标文件夹(每个包或组合),如 this answer 中所述。 =30=]
此外,对于
开始是这样Microsoft.Data.Sqlite
包,适合平台的 native 库(例如,win-x64\native\*.dll
来自 .NET SDK 项目发布文件夹的“运行times”文件夹子树)必须直接复制到 PowerShell(核心)中的目标文件夹,但奇怪的是 Windows PowerShell 中没有,至少从包版本 5.0.9
以下 示例代码使用 Add-NuGetType
辅助函数 ,可从 this MIT-licensed Gist 获得,它自动执行上述所有步骤:
注:
假设您已查看链接代码以确保它是安全的(我个人可以向您保证,但您应该始终检查),您可以直接安装
Add-NuGetType
如下(将显示有关如何在未来的会话中使用该功能或将其转换为脚本的说明):irm https://gist.github.com/mklement0/7436c9e4b2f73d7256498f959f0d5a7c/raw/Add-NuGetType.ps1 | iex
当第一次 运行 时,该函数会下载并安装嵌入文件夹中的 .NET SDK 的私有副本,稍后下载的 NuGet 包会缓存在该文件夹中。此初始安装需要一段时间,下面使用的
-Verbose
开关会报告其进度。Add-NuGetType
不是 用于 生产使用 ,而是用于 实验 使用 NuGet 包; 运行help Add-NuGetType
了解更多信息。
# Reference the relevant namespaces.
using namespace SqlKata
using namespace SqlKata.Compilers
using namespace SqlKata.Execution
using namespace Microsoft.Data.Sqlite
# Load the SqlKata and Sqlite asssemblies.
# See the comments above for how to install the Add-NuGetType function.
# Note: On first call, a private copy of the .NET SDK is downloaded
# on demand, which takes a while.
Add-NuGetType -Verbose SqlKata, SqlKata.Execution, Microsoft.Data.Sqlite
# First, create sample database './sample.db' with table 'sample_table'
@'
create table sample_table (Name string, Age int);
insert into sample_table (Name, Age) values ("JDoe", 42), ("JRoe", 43);
.save ./sample.db
'@ | sqlite3
# Create a [SqliteConnection] instance...
$connection = [SqliteConnection]::new("Data Source=$PWD/sample.db")
# ... and create a query factory for it.
$sqliteDb = [QueryFactory]::new($connection, [SqlServerCompiler]::new())
# Create and execute a sample query.
$query = $sqliteDb.Query("sample_table").Where("Name", "JRoe")
# Note the need to use the static methods of [SqlKata.Execution.QueryExtensions],
# because PowerShell doesn't make *extension methods* automatically available.
[SqlKata.Execution.QueryExtensions]::Get($query) # outputs [Dapper.SqlMapper+DapperRow] instances