如何使用PowerShell导入CSV文件?

3
我想使用PowerShell脚本将CSV文件(逗号分隔,带双引号)导入到SQLite中。我尝试了以下代码:

echo ".import export.csv mytable" | sqlite3.exe

我遇到了这个错误:

export.csv:327: 未转义的 " 字符

所有行都出现了这个错误。在SQLite的命令行 shell 中,相同的命令可以正常工作:

sqlite > .import export.csv mytable

如何使用PowerShell脚本使此命令生效?

在PowerShell中,您可能不需要使用echo(实际上是Write-Output的别名);尝试使用".import export.csv mytable" | sqlite3.exe - Jeff Zeitlin
@JeffZeitlin 我也遇到了同样的错误! - HBasiri
1
错误信息中的“327”是文件中的行号,还是sqlite报告的错误代码?如果它是一个行号,那么文件有多少行 - 当您手动导入时有多少行被导入? - Jeff Zeitlin
如果我没记错的话,你需要这样运行它:sqlite3 yourdatabase.db < ".import export.csv mytable" - henrycarteruk
1
@JamesC. “'<'” 运算符已被保留以备将来使用。 - HBasiri
啊,PowerShell不支持<重定向。 - henrycarteruk
3个回答

3

这在我使用的PowerShell 5.1和v7.0中都有效。

$params = @"
.mode csv
.separator ,
.import export.csv mytable
"@

$params | .\sqlite3.exe mydatabase.db

1
以下单行命令可在以下两个环境中运行:
  • cmd.exe(通过ver查看版本号为10.0.x.x)和
  • powershell.exe(通过$PSVersionTable查看版本号为5.1.x.x)
.\sqlite3.exe my.db ".import file1.csv table1 --csv"

这将把csv文件file1.csv的内容加载到sqlite数据库文件my.db中的表格table1中。使用--csv标志将导入文件并根据该文件中的标题列名创建表结构,并将大致推断数据类型。

您可以以此方式导入多个文件。 例如:

.\sqlite3.exe my.db ".import file1.csv table1 --csv" ".import file2.csv table2 --csv"

您可以将命令链接在一起,通过添加; .\sqlite3.exe my.db立即打开数据库进行查询。
.\sqlite3.exe my.db ".import file1.csv table1 --csv" ".import file2.csv table2 --csv; .\sqlite3.exe my.db"

0

关于sqlite3.exe的".import export.csv mytable",您有什么想法?

您可以查看sqlite3.exe的文档,以便在不使用其shell的情况下使用它,了解如何向sqlite3.exe传递参数。

您可以尝试以下命令行:

Invoke-Expression 'sqlite3 yourdatabase.db < ".import export.csv mytable"'

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接