手机网站的价值专题页面设计模板
- 作者: 五速梦信息网
- 时间: 2026年04月20日 08:45
当前位置: 首页 > news >正文
手机网站的价值,专题页面设计模板,免费下载软件的网站有哪些,南昌定制网站开发费用DuckDB是一个嵌入式SQL数据库引擎。它与众所周知的SQLite非常相似#xff0c;但它是为olap风格的工作负载设计的。DuckDB支持各种数据类型和SQL特性。凭借其在以内存为中心的环境中处理高速分析的能力#xff0c;它迅速受到数据科学家和分析师的欢迎。在这篇博文中#xff0… DuckDB是一个嵌入式SQL数据库引擎。它与众所周知的SQLite非常相似但它是为olap风格的工作负载设计的。DuckDB支持各种数据类型和SQL特性。凭借其在以内存为中心的环境中处理高速分析的能力它迅速受到数据科学家和分析师的欢迎。在这篇博文中我们将探索在Go中使用DuckDB。 DuckDB的主要优点
内存内执行DuckDB主要在内存中操作但也支持内存外执行。这使得它能够非常快速有效地执行计算。完整的SQL支持DuckDB支持广泛的SQL特性这使得它对于各种类型的数据操作非常灵活。事务支持DuckDB支持事务这是在许多应用程序中维护数据完整性和一致性的关键特性。向量化执行DuckDB使用向量化查询执行从而提高CPU利用率和性能。易于集成DuckDB为多种编程语言提供api包括Python、R、c、Rust、Java和Go。这使得将DuckDB集成到现有工作流和系统中变得更加容易。开源DuckDB是开源的这意味着它的源代码可以免费修改或增强。这允许社区驱动的改进和对特定用例的适应性。
环境准备
在开始使用DuckDB和Go之前需要安装DuckDB Go驱动程序。你可以使用Go的包管理器下载。在终端上运行以下命令
github.com/marcboeker/go-duckdb连接数据库
package mainimport (database/sqllog_ github.com/marcboeker/go-duckdb
)func main() {// Empty datasource means, that DB will be solely in-memory, otherwise you could specify a filename heredb, err : sql.Open(duckdb, )if err ! nil {log.Fatal(Failed to connect to database:, err)}defer db.Close()
}安装了驱动程序后现在可以从Go应用程序建立到DuckDB的连接。sql.Open() 函数用于连接到DuckDB空数据源名称表示我们正在使用内存中的数据库你也可以指定数据库文件名称实现数据持久化相对于当前项目所在目录。
初始化表和数据
现在连接已经建立你可以执行各种数据库操作了。我们首先创建表然后插入初始化数据进行测试
package mainimport (database/sqlfmtlogtime_ github.com/marcboeker/go-duckdb
)var db *sql.DB
var err errorfunc main() {// Empty datasource means, that DB will be solely in-memory, otherwise you could specify a filename heredb, err sql.Open(duckdb, data.db)if err ! nil {log.Fatal(Failed to connect to database:, err)}defer db.Close()init_data()
}func initdata() {// Create table, err : db.Exec(CREATE TABLE employee (id INTEGER,name VARCHAR(20),start_dt TIMESTAMP,isremote BOOLEAN))if err ! nil {log.Fatal(err)}// Insert some data in table, err db.Exec(INSERT INTO employee (id, name, start_dt, is_remote)VALUES(1, John Doe, 2022-01-01 09:00:00, true),(2, Jane Smith, 2023-03-15 10:00:00, false))if err ! nil {log.Fatal(err)}
}在处理较大的数据集时考虑使用事务和预处理语句以提高效率和安全性。记住总是处理错误并在完成后关闭连接。
查询单行或多行
要获取数据可以使用QueryRow() 函数来选择单行
func query_one() {// Variables to store query resultvar id intvar name stringvar startDt time.Timevar isRemote bool// Query single rowif err : db.QueryRow(SELECT id, name, start_dt, is_remote FROM employee WHERE id ?, 1).Scan(id, name, startDt, isRemote); err ! nil {if err sql.ErrNoRows {log.Println(No rows found.)} else {log.Fatalf(unable to execute query: %v, err)}} else {fmt.Println(Select 1 row result:\nID:, id, Name:, name, Start Datetime:, startDt, Is Remote:, isRemote)}
}不要忘记处理任何错误并正确关闭连接和结果集如上所示。
要选择多行可以使用Query() 函数
func query_all() {// Variables to store query resultvar id intvar name stringvar startDt time.Timevar isRemote bool// Query multiple rowsrows, err : db.Query(SELECT id, name, start_dt, is_remote FROM employee)if err ! nil {log.Fatal(err)}defer rows.Close()// Print the resultsfmt.Println(Results:)for rows.Next() {err rows.Scan(id, name, startDt, isRemote)if err ! nil {log.Fatal(err)}fmt.Println(ID:, id, Name:, name, Start Datetime:, startDt, Is Remote:, isRemote)}err rows.Err()if err ! nil {log.Fatal(err)}
}
我们用SQL命令调用Query()函数从employee表中选择所有记录。
然后使用rows.Next()进入循环该循环遍历查询返回的每一行。在循环中我们使用Scan()函数将当前行的列复制到id、name、startDt和isRemote变量中。然后使用fmt.Println()函数打印这些变量。循环结束后使用rows.Err()检查迭代过程中的错误。如果有错误我们使用log.Fatalerr打印它。
错误处理和事务
在现实世界中Go代码必须准备好处理错误和处理事务。SQL包提供了所有必要的工具
func transinsert() {// Error handling and transactionstx, err : db.Begin()if err ! nil {log.Fatal(err)}defer tx.Rollback(), err tx.Exec(INSERT INTO employee (id, name, start_dt, isremote)VALUES(3000000000, id int64 instead of int32, 2022-06-17 11:00:00, true))if err ! nil {log.Printf(ERROR: %s\n, err.Error()) // Do not fail, just print the error in output}err tx.Commit()if err ! nil {log.Fatal(err)}
}此代码开始事务尝试执行插入语句然后提交事务。如果在执行期间发生错误它将回滚在该事务中所做的任何更改。
完整代码
package mainimport (database/sqlfmtlogtime github.com/marcboeker/go-duckdb
)var db *sql.DB
var err errorfunc main() {// Empty datasource means, that DB will be solely in-memory, otherwise you could specify a filename heredb, err sql.Open(duckdb, data.db)if err ! nil {log.Fatal(Failed to connect to database:, err)}defer db.Close()// init_data()query_one()// trans_insert()query_all()
}func initdata() {// Create table, err db.Exec(CREATE TABLE employee (id INTEGER,name VARCHAR(20),start_dt TIMESTAMP,isremote BOOLEAN))if err ! nil {log.Fatal(err)}// Insert some data in table, err db.Exec(INSERT INTO employee (id, name, start_dt, is_remote)VALUES(1, John Doe, 2022-01-01 09:00:00, true),(2, Jane Smith, 2023-03-15 10:00:00, false))if err ! nil {log.Fatal(err)}
}func transinsert() {// Error handling and transactionstx, err : db.Begin()if err ! nil {log.Fatal(err)}defer tx.Rollback(), err tx.Exec(INSERT INTO employee (id, name, start_dt, is_remote)VALUES(3000000000, id int64 instead of int32, 2022-06-17 11:00:00, true))if err ! nil {log.Printf(ERROR: %s\n, err.Error()) // Do not fail, just print the error in output}err tx.Commit()if err ! nil {log.Fatal(err)}
}func query_one() {// Variables to store query resultvar id intvar name stringvar startDt time.Timevar isRemote bool// Query single rowif err : db.QueryRow(SELECT id, name, start_dt, is_remote FROM employee WHERE id ?, 1).Scan(id, name, startDt, isRemote); err ! nil {if err sql.ErrNoRows {log.Println(No rows found.)} else {log.Fatalf(unable to execute query: %v, err)}} else {fmt.Println(Select 1 row result:\nID:, id, Name:, name, Start Datetime:, startDt, Is Remote:, isRemote)}
}func query_all() {// Variables to store query resultvar id intvar name stringvar startDt time.Timevar isRemote bool// Query multiple rowsrows, err : db.Query(SELECT id, name, start_dt, is_remote FROM employee)if err ! nil {log.Fatal(err)}defer rows.Close()// Print the resultsfmt.Println(Results:)for rows.Next() {err rows.Scan(id, name, startDt, isRemote)if err ! nil {log.Fatal(err)}fmt.Println(ID:, id, Name:, name, Start Datetime:, startDt, Is Remote:, isRemote)}err rows.Err()if err ! nil {log.Fatal(err)}
}
最后总结
DuckDB对Go的支持允许开发人员直接从他们的Go应用程序中执行强大的数据分析操作。强大的数据管理系统和通用高效的编程语言之间的这种集成为更先进的数据处理应用打开了大门。有了本文提供的基础知识你就可以开始探索这些可能性了。
- 上一篇: 手机网站单页网站的主要内容
- 下一篇: 手机网站的静态页面济南做网站找哪家好
