资讯专栏INFORMATION COLUMN

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

CarterLi / 2517人阅读

摘要:本文以用一个在数据库中保存图片信息为例展示如何向中插入二进制数据首先我们要知道中唯一一种二进制数据的类型为表示字节数组或字节序列对应于和中的下面是一个示例迁移脚本这里也可以为实际上在执行数据库中字段的类型就是当然除了图片文件以外你还

本文以用一个在数据库中保存图片信息为例, 展示如何向 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})
  end
end

迁移脚本

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

  end
end

当然, 除了图片文件以外, 你还可以存储其他格式的二进制文件, 比如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"

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/38959.html

相关文章

  • Elixir Ecto: PostgreSQL大自增长主键的设置

    摘要:要解决的问题数据库中存储的行数超过了类型所能容纳的数量因此需要采用类型的整数作为主键的取值范围为到的取值范围为到完整的字段的数据类型可以参考这里迁移脚本要点的参数要设置为通过宏指定主键列类型为模型的声明要点主键要声明为类型完 要解决的问题 数据库中存储的行数超过了 serial 类型所能容纳的数量, 因此需要采用 bigserial 类型的整数作为主键serial 的取值范围为: 1...

    yvonne 评论0 收藏0
  • Elixir Ecto: 使用Geo库操作空间数据(地理坐标)

    摘要:简介数据格式空间数据的文本标识空间数据的二进制标识基于对象表示法的地理空间信息数据交换格式的库提供了上述三种格式的相互转换函数配置添加依赖配置扩展创建删除扩展的移植脚本脚本内容执行移植插入数据轨迹点粤获取经纬度粤查询联系如何查询字段例 简介 数据格式 Abbr Fullname Description WKT Well Known Text 空间数据的文本标识 WKB ...

    Blackjun 评论0 收藏0
  • Elixir Ecto: 模型的嵌入(Embed)

    摘要:及其以上版本可以存储类似这样的非结构化数据作为一个的数据封装器提供了这些非结构话的数据到原生数据类型的序列化和反序列化嵌入的记录具有所有常规模型所具有的东西比如结构化的字段生命周期回调变更集下面研究如何把结构嵌入到模型当中使用嵌入单个结构可 Postgres 9.4 及其以上版本可以存储类似 arrays, json, jsonb 这样的非结构化数据. Ecto 作为一个 Elixir...

    ningwang 评论0 收藏0
  • Elixir Ecto: Postgres使用UUID类型的主键

    摘要:使用作为主键的目的降低类型这种自增线性特征作为随机生成的字符串让更离散增强系统的反爬虫能力至少避免通过的线性增加来爬取内容这种最简单的爬取方式使用主键的是那种方式各有优缺点可按实际需求自行权衡在应用程序中生成并插入到数据库通过使用扩展自动生 使用UUID作为主键的目的 降低Serial类型这种自增ID线性特征, UUID作为随机生成的字符串, 让ID更离散, 增强系统的反爬虫能力(至...

    OnlyLing 评论0 收藏0
  • 前端速查表大全,分享一些技术和工具的简明教程

    摘要:这个速查表主要是分享互联网上一些比较常用的工具和技术常用内容,如编辑器的快捷键的命令行的选择器的属性等,这个列表简单收集了常用的工具,可以收藏用于平时的备忘录,需要用到的时候可以及时查阅。 这个速查表主要是分享互联网上一些比较常用的工具和技术常用内容,如编辑器的快捷键、git的命令行、jQuery的API选择器、CSS的flexbox属性等,这个列表简单收集了常用的工具,可以收藏用于平...

    xiaochao 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<