Elixir Ecto: 在Postgresql中插入二进制数据

Elixir Ecto: 在Postgresql中插入二进制数据,第1张

概述本文以用一个在数据库中保存图片信息为例, 展示如何向 Postgresql 中插入二进制数据. 首先我们要知道 Postgresql 中唯一一种二进制数据的类型为 bytea, 表示字节数组或字节序列. 对应于Oracle和MySQL中的 blob. 下面是一个示例 defmodule Bytea.Model.Test do import Ecto.Changeset use Ecto.S

本文以用一个在数据库中保存图片信息为例,展示如何向 Postgresql 中插入二进制数据.

首先我们要知道 Postgresql 中唯一一种二进制数据的类型为 bytea,表示字节数组字节序列. 对应于Oracle和MysqL中的 blob.

下面是一个示例

defmodule Bytea.Model.Test do  import Ecto.Changeset  use Ecto.Schema  alias Bytea.Repo  schema "tests" do    fIEld :photo,:binary    timestamps()  end  def changeset(struct,params \ %{}) do    struct    |> cast(params,[:photo])    |> valIDate_required([:photo])  end  def insert(map) do    Map.merge(%__MODulE__{},map) |> Repo.insert  end  def test_insert do    {:ok,contents} = file.read("/tmp/FB7D22A5-924E-4DA5-AC93-5D815FA1AEA8.png")    insert(%{photo: contents})  endend

迁移脚本

defmodule Bytea.Repo.Migrations.CreateTest do  use Ecto.Migration  def change do    create table(:tests) do      # 这里也可以为 :binary,实际上在执行 mix ecto.migrate 数据库中:photo字段的类型就是:bytea      add :photo,:bytea      timestamps()    end  endend

当然,除了图片文件以外,你还可以存储其他格式的二进制文件,比如Word文档,pdf文档等等.

实验步骤

mix phoenix.new bytea --no-brunch
创建项目,提示下载依赖,输入 Y

mix compile
编译项目

vi config/dev.exs
配置数据库,默认生成的用户名和密码都是postgres,所以在测试的时候把你的数据库用户名和密码设置成postgres是非常方便的.

mix ecto.setup
创建数据库和表,这个命令实际上是在mix.exs中定义的别名,包含多个子命令

IEx -S mix phoenix.server
启动测试

示例地址

https://github.com/developerw...

测试的时候可以随便找一个文件放到这个位置 "/tmp/FB7D22A5-924E-4DA5-AC93-5D815FA1AEA8.png"

总结

以上是内存溢出为你收集整理的Elixir Ecto: 在Postgresql中插入二进制数据全部内容,希望文章能够帮你解决Elixir Ecto: 在Postgresql中插入二进制数据所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/sjk/1174172.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-02
下一篇 2022-06-02

发表评论

登录后才能评论

评论列表(0条)

保存