当前,在Rust项目中与PostgreSQL交互时,有三个主要首选目标:
- tokio-postgres
- sqlx
- Diesel
此三项均广受欢迎,已被很多网站与产品采用,在商用中占有相当大的份额。 如果是您会选哪一个?
我们来根据三个条件进行对比:
- 编译时安全
- SQL VS DSL
- 异步 VS 同步
编译时安全与关系数据库交互时很容易出错,例如:
- 查询中列(column)或表(table)名称拼写错误
- 执行操作被数据库引擎拒绝(将一个字符串和一个数字相加或在错误的列上连接两个表)
- 返回的数据中有一个实际上不存在的字段
最主要的问题是,我们不知不觉中什么时候弄错也不知道。
在使用tokio-postgres时与大多数编程语言一样会发生这样的情况;在运行时我们试着查询而被数据库拒绝,此时我们将看到出错或异常。
Diesel与sqlx通过在编译时检测大多数所提这些错误来加快反馈周期。Diesel利用其CLI将数据库模式表示生成为Rust代码,然后预设用于检查所有查询。
相反,sqlx使用程序宏在编译时连接到数据库并检查所提供查